haskell 中的 const 函数声明

const function declaration in haskell

我对 const 函数的一个特定示例感到困惑。所以类型声明 const :: a -> b->a 说明函数接受两个类型 ab 的参数,并且 returns 一个类型 a。例如:

const 5 3 => 5
const 1 2 => 1

根据声明,这是有道理的。但是,我 运行 进入这个具体的例子:

const (1+) 5 3 => 4

这让我质疑我对函数声明的理解。我知道这个函数只需要两个参数,因为我试过:

const 1 5 3 

现在这让我放心,它只需要 2 个参数。那么这是如何工作的呢? (1+) 不是参数吗?如果不是,那是什么?

const (1+) 5 3 => 4

I know this function only takes two parameters (…)

Haskell 中的每个函数都有 一个 参数。事实上,如果你写:

 const 5  1

那么这是以下的简称:

(const 5) 1

类型签名 const :: a -> b -> aconst :: a -> (b -> a) 的更紧凑形式。

因此 const 5 将创建一个忽略参数(这里 1)和 returns 给它的值 5.

的函数

现在 const (1+) 5 3 因此意味着我们写了:

((const (1+)) 5) 3

const (1+)将因此构造一个忽略参数的函数,而returns(1+),因此const (1+) 5(1+)。于是我们计算:

(1+) 3

4.