如何找出Haskell中的执行序列?

时间:2016-10-16 16:18:01

标签: haskell

Haskell能够在案例1中一个接一个地运行两个函数调用但在下面的案例2中混淆了,为什么?

ghci> id id 1   -- case 1

ghci> (+1) id 1 -- case 2

1 个答案:

答案 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),则必须用括号写出来。