哗众取宠

在 Haskell 中,所有函数都被认为是 curry:即 Haskell 中的所有函数只接受一个参数。

我们来看看 div 的功能:

div::Int -> Int -> Int

如果我们用 6 和 2 调用这个函数,我们不出所料得到 3:

Prelude> div 6 2
3

但是,这并不像我们想象的那样。首先评估 div 6返回 Int -> Int 类型的函数。然后将得到的函数应用于值 2,其产生 3。

当我们看一个函数的类型签名时,我们可以将我们的思维从“取两个类型 Int 的参数”改为“取一个 Int 并返回一个接受 Int 的函数”。如果我们认为类型符号中的箭头与右侧相关联*,*则重申这一点,因此实际上可以读取 div

div::Int -> (Int -> Int)

通常,大多数程序员至少在学习语言时可以忽略这种行为。从理论的角度来看 ,“当所有函数被统一处理时(一个参数,一个结果),形式证明就更容易了。”