无法读取点分隔的整数

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 的图书馆列表中提出。