无法读取以点分隔的整数

n. *_* m. 20 haskell ghc

在尝试读取点分隔整数列表时,我注意到了一件奇怪的事情.

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它来克服它.

我的问题是,这种行为是否记录在报告的某个地方?如果是这样,为什么?

scl*_*clv 1

这不仅没有记录在报告中,而且似乎与报告存在差异。

出于效率原因或其他原因,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 的库列表中。