Sml curried函数类型中括号之间的差异

Sml curried函数类型中括号之间的差异,sml,smlnj,ml,Sml,Smlnj,Ml,那些退货类型有什么不同 val fn1 : int −> (int −> (int −> int)) val fn2: (int −> int) −> (int −> int) 这将创建类型为的函数 int -> int -> int meaning int -> (int -> int) 是这样吗?没有括号,它们有相同的意思 正如您所说,fn1的函数类型相当于int->int->int->int->int 如果有多个参

那些退货类型有什么不同

val fn1 : int −> (int −> (int −> int))
val fn2: (int −> int) −> (int −> int)
这将创建类型为的函数

int -> int -> int    meaning    int -> (int -> int)

是这样吗?没有括号,它们有相同的意思

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

如果有多个参数,如
fn1 a b c
,那么
fn1 a
int->int->int
类型的函数,
fn1 a b
int->int
类型的函数。因此,
fn1
也可以被看作是一个返回函数的函数,该函数返回一个返回
int
的函数。添加括号,如
int->(int->(int->int))
将突出显示该解释


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

的函数来添加,
fn2
的类型也可以写成
(int->int)->int->int
,但第一个括号不能去掉