为什么Haskell无法读取“7e7”,却能读取“7a7”?
试着做:
Prelude> reads "7a7" :: [(Int, String)] [(7,"a7")] Prelude> reads "7e7" :: [(Int, String)] []  我在中间testing了所有可能的人物。 他们都工作,除了'e' 。  哈斯克尔似乎试图用科学记数法来解释这个数字,但它不能因为我要求的是整数。 
这对我来说似乎是一个错误。
  GHC确实是越野车。 它的Numeric.readSigned实现使用以下内容: 
 read'' r = do (str,s) <- lex r (n,"") <- readPos str return (n,s) 
  lex调用将尝试parsing任何语义,这意味着对于“7e7”它会产生[("7e7", "")] ,因为“7e7”是浮点数字的整个语言。 然后它试图从readPos获得一个完整的parsing,在这种情况下,它是一个参数, Numeric.readDec被传入, readDec将正确地产生string“7e7”的[(7, "e7")] 。 与(n, "")模式匹配失败,并以[]结束。 
我觉得应该简单如下:
 read'' = readPos 
  7e7 :: Fractional a => a所以它不能被读为一个Int ,但它可以被读作Float或Double 7e7 :: Fractional a => a 。 
 ghci> :t 7e7 7e7 :: Fractional a => a 
你正在使用哪个版本的GHC?
以下是我的设置中terminal会话的(编辑)输出:
 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> 
在这里如何解释input是不明确的。 通常我想像“7e7”的解释是一个70000000的诠释将是完全可以接受的。 编译器应该如何知道在第一个数字之后拆分string?