哈斯克尔不能读这篇文章:" .3"。这是一个错误吗?

时间:2014-04-09 21:52:07

标签: parsing haskell double

GHC Haskell似乎需要一个小数点前面的数字才能读取Double。这是代码:

main :: IO ()
main = do
  let d1 = read "0.3" :: Double
      d2 = read ".3"  :: Double      
  print d1
  print d2

运行它会产生:

0.3
*** Exception: Prelude.read: no parse

这是一个GHC错误还是一个主要限制?

(我尝试阅读" .3"使用C,Javascript和MS Excel,所有这些都可以成功解析" .3"并将其理解为一个数字。我想我和我#39;我在程序的其他方面看到了这个问题的影响,包括用parseargs包读取命令行参数和用Yesod的MForms读取html表格中的双打。)

此问题是否有已知修复或解决方法?

2 个答案:

答案 0 :(得分:17)

来自Haskell报告:

2.5数字文字

  

浮动文字必须包含数字之前和之后的数字   小数点;这确保了小数点不会被误认   用于点字符的另一种用途

所以这是预期的行为。

答案 1 :(得分:0)

我接受了iand675的回答,但他只是留下了评论,所以我在这里复制它:

Haskell中具有Read实例的所有标准类型都被编写为读取有效的Haskell。如果你使用读取输入不能解析为有效的Haskell,你可能应该使用除了读取之外的东西。

Lee的答案很有帮助,因为它定义了Haskell的数字文字。