Curry 对赋值感到困惑

Currying confusing about assignment

我有以下使用柯里化的代码片段:

let multiply x y = x * y
let double = multiply 2
let ten = double 5

上面的代码我看懂了,因为我记得这段代码:

Currying is converting a single function of n arguments into n functions with a single argument each

然后我遇到了下面的代码:

let double2 z = multiply 2 z
double2 5

我完全看不懂这段代码。为什么double2可以是函数?

后一个示例中发生的事情真的没什么特别的。

你基本上可以读作:

define a function double2 with one argument z,
which is defined as multiply 2 z

有些人可能将其称为 "currying" 或 "partial function evaluation" 但实际上这里发生的所有事情是您定义了一个在其函数体中使用另一个函数的函数。

let double2 z = multiply 2 z
         // ^ here you define a parameter

这会把它变成一个函数。