无法读取以点分隔的整数

时间:2015-12-14 17:04:16

标签: haskell ghc

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

Prelude> (reads "123") :: [(Integer,String)]
[(123,"")]
Prelude> (reads "123.") :: [(Integer,String)]
[(123,".")]
Prelude> (reads "123.456") :: [(Integer,String)]
[]

我理解为什么它会在实施方面发生(readNumber成功,然后convert失败),并且我了解如何使用readDec来克服它。

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

1 个答案:

答案 0 :(得分:1)

报告中不会记录这一点,报告中似乎出现差异

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