Haskell能够在案例1中一个接一个地运行两个函数调用但在下面的案例2中混淆了,为什么?
ghci> id id 1 -- case 1
ghci> (+1) id 1 -- case 2
答案 0 :(得分:7)
函数应用程序是左关联的,这意味着您的示例被解析为:
(id id) 1
((+1) id) 1
前者因此而减少:
(id id) 1
id 1
1
后者没有进行类型检查。 (+1)
的类型为Num n => n -> n
,而id
的类型为a -> a
,而不是数字。
如果您的意思是(+1) (id 1)
,则必须用括号写出来。