哈斯克尔不能读这个双:".3".这是一个错误吗?

Tad*_*Tad 4 double parsing haskell

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

main :: IO ()
main = do
  let d1 = read "0.3" :: Double
      d2 = read ".3"  :: Double      
  print d1
  print d2
Run Code Online (Sandbox Code Playgroud)

运行它会产生:

0.3
*** Exception: Prelude.read: no parse
Run Code Online (Sandbox Code Playgroud)

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

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

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

Lee*_*Lee 17

来自Haskell的报告:

2.5数字文字

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

所以这是预期的行为.

  • @Tad:我的意思是关于语言中浮点数的规则是相同的 - 你需要在Ruby中使用前导0表示浮点数.`.3`是语法错误.确实``.3".to_f`有效,但`.3鸡.".to_f`也是如此,因为Ruby的`String#to_f`被设计为对它所接受的内容慷慨,而不是像Haskell那样需要有效的代码. (4认同)
  • 从iand675的回答和Lee的回答中,我现在明白read只是为了解析有效Haskell的字符串.谢谢你的帮助. (2认同)