Haskell:Brackets工作,但$抛出一个错误

时间:2013-07-28 09:49:19

标签: haskell

我希望以下代码将“15”转换为整数并打印结果,但会引发错误。

main = print $ read "15" :: Integer

Couldn't match expected type `Integer' with actual type `IO ()'

但只使用main = print (read "15" :: Integer)运行正常。我的印象是$有效地围绕括号中的其余部分。 为什么在这种情况下$不工作?

1 个答案:

答案 0 :(得分:12)

$不是将(置于当前位置并且)位于该行末尾的语法糖。

所以print $ read "15" :: Integer被解释为(print (read "15")) :: Integer。之所以会发生这种情况是因为$ :: (a -> b) -> a -> b(功能组合中缀运算符)将两个函数printread "15"和«应用»它们相互依赖。 :: Integer似乎不是此处的函数,它更像是关键字,因此$无法按预期方式运行。