Haskell 中的 const 函数声明

Jul*_*ian 4 haskell function-declaration haskell-prelude

我对该const功能的一个特定示例感到困惑。因此类型声明声明const :: a -> b->a该函数接受两个类型为aand 的参数b并返回一个类型a。例如:

const 5 3 => 5
const 1 2 => 1
Run Code Online (Sandbox Code Playgroud)

根据声明,这是有道理的。但是,我遇到了这个特定的例子:

const (1+) 5 3 => 4
Run Code Online (Sandbox Code Playgroud)

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

const 1 5 3 
Run Code Online (Sandbox Code Playgroud)

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

const (1+) 5 3 => 4
Run Code Online (Sandbox Code Playgroud)

Wil*_*sem 11

我知道这个函数只需要两个参数(...)

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

 const 5  1
Run Code Online (Sandbox Code Playgroud)

那么这是缩写:

(const 5) 1
Run Code Online (Sandbox Code Playgroud)

类型签名const :: a -> b -> aconst :: a -> (b -> a).

Soconst 5将创建一个忽略参数(此处1)并返回给定值的函数5

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

((const (1+)) 5) 3
Run Code Online (Sandbox Code Playgroud)

const (1+)因此将构造一个忽略参数的函数,并返回(1+),因此const (1+) 5(1+)。然后我们计算:

(1+) 3
Run Code Online (Sandbox Code Playgroud)

这是4.