curried函数类型中括号之间的区别

时间:2017-10-20 15:14:03

标签: sml smlnj ml

那些返回类型的不同之处是什么?

val fn1 : int −> (int −> (int −> int))
val fn2: (int −> int) −> (int −> int)

这会创建一个

类型的函数
int -> int -> int    meaning    int -> (int -> int)

是吗?它们具有相同的意义而没有括号!

1 个答案:

答案 0 :(得分:3)

正如您所说,fn1的函数类型等同于int -> int -> int -> int

如果您有多个curried参数,例如fn1 a b c,则fn1 aint -> int -> int类型的函数,而fn1 a bint -> int类型的函数1}}。所以fn1也可以看作是一个返回函数的函数,该函数返回一个返回int的函数。添加像int -> (int -> (int -> int))这样的括号会突出显示这种解释。

函数fn2是不同的:它使用类型为int -> int的函数作为参数,并返回另一个类型为int -> int的函数。