在尝试读取点分隔整数列表时,我注意到了一件奇怪的事情.
Prelude> (reads "123") :: [(Integer,String)]
[(123,"")]
Prelude> (reads "123.") :: [(Integer,String)]
[(123,".")]
Prelude> (reads "123.456") :: [(Integer,String)]
[]
Run Code Online (Sandbox Code Playgroud)
我理解为什么它会在实现方面发生(readNumber成功然后convert失败),我理解如何使用readDec它来克服它.
我的问题是,这种行为是否记录在报告的某个地方?如果是这样,为什么?
这不仅没有记录在报告中,而且似乎与报告存在差异。
出于效率原因或其他原因,GHC 标准库在许多地方与报告中的参考实现存在差异。但是,除非仔细注明,否则实现应该与行为相匹配。
然而,如果我们查看Haskell 报告的相关部分,我们会发现
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
Run Code Online (Sandbox Code Playgroud)
我们看到它使用了不同的实现,我认为没有这种行为。
因此,这当然应该被添加到 haskell.org 的库列表中。