SML中的函数数据类型不清楚

SML中的函数数据类型不清楚,sml,Sml,给定SML中的以下功能: fun i a b = let fun j()=a+1 in j end; 函数的数据类型为: val i = fn : int -> 'a -> unit -> int 我不明白为什么int->'a->unit->int 为什么不(int*a')->unit->int,因为函数i接收两个输入 这个函数(以及SML中的任何函数)实际上是接收一个输入,因为使用了curry 从技术上讲,有一个函数取单位,它返回的函数取‘a’,它返回的函数取int 所以

给定SML中的以下功能:

fun i a b = let fun j()=a+1 in j end;
函数的数据类型为:

val i = fn : int -> 'a -> unit -> int
我不明白为什么
int->'a->unit->int

为什么不
(int*a')->unit->int
,因为函数
i
接收两个输入

这个函数(以及SML中的任何函数)实际上是接收一个输入,因为使用了curry

从技术上讲,有一个函数取单位,它返回的函数取‘a’,它返回的函数取int

所以

等等

这个函数(以及SML中的任何函数)实际上是接收一个输入,因为使用了curry

从技术上讲,有一个函数取单位,它返回的函数取‘a’,它返回的函数取int

所以


等等

如果您将函数定义为
funi(a,b)=……
,那么它将以一个元组作为参数,其类型实际上是
(int*'a)->unit->int
。它将被称为
i(23,42)(
(23,42)
是一个元组,
()
是单位值)


但是,您将其定义为
funiab=…
,它定义了一个接受一个参数的函数,然后返回另一个接受下一个参数的函数。这是一个快捷方式,
funia=fnb=>…
。它可以被称为
iab()

如果您将函数定义为
funi(a,b)=……
,那么它将接受一个元组作为参数,它的类型实际上是
(int*'a)->unit->int
。它将被称为
i(23,42)(
(23,42)
是一个元组,
()
是单位值)


但是,您将其定义为
funiab=…
,它定义了一个接受一个参数的函数,然后返回另一个接受下一个参数的函数。这是一个快捷方式,
funia=fnb=>…
。它可以被称为
iab()

也许,它会给你更多的关于咖喱的知识?也许,它会给你更多的关于咖喱的知识?咖喱,而不是随身携带。)@我希望哈斯克尔先生能原谅我;-)(用咖喱,不带)@我希望哈斯克尔先生能原谅我;-)
fun foo a b = a + b;
fun foo a = fn b => a + b;