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表格中的双打。)
此问题是否有已知修复或解决方法?
答案 0 :(得分:17)
来自Haskell报告:
2.5数字文字
浮动文字必须包含数字之前和之后的数字 小数点;这确保了小数点不会被误认 用于点字符的另一种用途
所以这是预期的行为。
答案 1 :(得分:0)
我接受了iand675的回答,但他只是留下了评论,所以我在这里复制它:
Haskell中具有Read实例的所有标准类型都被编写为读取有效的Haskell。如果你使用读取输入不能解析为有效的Haskell,你可能应该使用除了读取之外的东西。
Lee的答案很有帮助,因为它定义了Haskell的数字文字。