无法读取点分隔的整数
Can't reads dot-separated integers
在尝试读取以点分隔的整数列表时,我注意到一件奇怪的事情。
Prelude> (reads "123") :: [(Integer,String)]
[(123,"")]
Prelude> (reads "123.") :: [(Integer,String)]
[(123,".")]
Prelude> (reads "123.456") :: [(Integer,String)]
[]
我明白为什么它会在实施方面发生(readNumber
成功然后 convert
失败),我明白如何使用 readDec
来克服它。
我的问题是,此行为是否记录在报告的某处?如果是,为什么?
这不仅没有记录在报告中,而且似乎与报告有差异。
出于效率原因或其他原因,GHC 标准库在很多地方与报告中的参考实现不同。但是,除非仔细说明,否则实现应该与行为相匹配。
但是,如果我们查看 Haskell 报告的 relevant part,我们会看到
instance Read Int where
readsPrec p r = [(fromInteger i, t) | (i,t) <- readsPrec p r]
-- Reading at the Integer type avoids
-- possible difficulty with minInt
instance Read Integer where
readsPrec p = readSigned readDec
我们看到它使用了我认为没有这种行为的不同实现。
因此,这当然应该在 haskell.org 的图书馆列表中提出。
在尝试读取以点分隔的整数列表时,我注意到一件奇怪的事情。
Prelude> (reads "123") :: [(Integer,String)]
[(123,"")]
Prelude> (reads "123.") :: [(Integer,String)]
[(123,".")]
Prelude> (reads "123.456") :: [(Integer,String)]
[]
我明白为什么它会在实施方面发生(readNumber
成功然后 convert
失败),我明白如何使用 readDec
来克服它。
我的问题是,此行为是否记录在报告的某处?如果是,为什么?
这不仅没有记录在报告中,而且似乎与报告有差异。
出于效率原因或其他原因,GHC 标准库在很多地方与报告中的参考实现不同。但是,除非仔细说明,否则实现应该与行为相匹配。
但是,如果我们查看 Haskell 报告的 relevant part,我们会看到
instance Read Int where
readsPrec p r = [(fromInteger i, t) | (i,t) <- readsPrec p r]
-- Reading at the Integer type avoids
-- possible difficulty with minInt
instance Read Integer where
readsPrec p = readSigned readDec
我们看到它使用了我认为没有这种行为的不同实现。
因此,这当然应该在 haskell.org 的图书馆列表中提出。