5

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

main = print $ read "15" :: Integer

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

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

4

1 回答 1

12

$不是放在(当前位置和)行尾的语法糖。

所以print $ read "15" :: Integer被解释为(print (read "15")) :: Integer. 发生这种情况是因为$ :: (a -> b) -> a -> b(功能组合中缀运算符)采用两个功能printread "15"一个接一个地“应用”它们。:: Integer这里似乎不是一个函数,它更像是一个关键字,所以$不能按您预期的方式工作。

于 2013-07-28T09:51:55.133 回答