试着去做:
Prelude> reads "7a7" :: [(Int, String)]
[(7,"a7")]
Prelude> reads "7e7" :: [(Int, String)]
[]
我测试了中间所有可能的字符。除了'e'
之外,它们都可以工作。看起来好像Haskell试图用科学记数法来解释这个数字,但它不能,因为我请求的是Int
。
对我来说,这似乎是个bug。
发布于 2014-03-28 07:04:43
7e7 :: Fractional a => a
,所以它不能作为Int
读取,但可以作为Float
或Double
读取。
ghci> :t 7e7
7e7 :: Fractional a => a
发布于 2014-04-03 04:41:03
您使用的是哪个版本的GHC?
以下是我的设置中终端会话的(编辑过的)输出:
GHCi, version 7.4.1: http://www.haskell.org/ghc/ :? for help
Prelude> reads "7a7" :: [(Int, String)]
[(7,"a7")]
Prelude> reads "7e7" :: [(Int, String)]
[(70000000,"")]
Prelude>
这里有一个如何解释输入的模棱两可的地方。通常,我认为将"7e7“解释为70000000的Int是完全可以接受的。编译器如何知道在第一个数字之后拆分字符串?
https://stackoverflow.com/questions/22689122
复制相似问题