【发布时间】:2014-03-27 13:28:42
【问题描述】:
尝试做:
Prelude> reads "7a7" :: [(Int, String)]
[(7,"a7")]
Prelude> reads "7e7" :: [(Int, String)]
[]
我测试了中间所有可能的字符。除了'e',它们都可以工作。似乎Haskell 试图用科学计数法解释数字,但它不能,因为我要的是Int。
对我来说这似乎是一个错误。
【问题讨论】:
-
我也认为这是一个错误。如果这是故意的,我至少会认为
reads被破坏(很像head和其他可能引发错误的纯函数)。 -
我不确定,但可以很容易地想象,7e7 是 7*10^7 的表示。因此只找到一个整数,没有找到字符串。
-
reads "7e7" :: [(Float, String)]返回[(7.0e7,"")]。我认为这是一个错误,Int的Read实例不应处理e特别像Float -
如我所料。所以……我应该举报吗?实际上,如果 Haskell 确实以科学计数法解释 7e7,为什么不简单地返回整数呢?
70000000是有效的Int。 -
@romeovs 是的,你应该报告它并在我的回答中包含提供的信息。