SML中的功能数据类型不清楚

时间:2013-02-16 22:32:55

标签: 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收到两个输入。

2 个答案:

答案 0 :(得分:2)

这个函数(以及SML中的任何函数)实际上是因为currying而接收一个输入。

技术上有一个带单元的函数,返回带有'返回带有int的函数的函数。

所以

fun foo a b = a + b;

just an syntactic sugar

fun foo a = fn b => a + b;

等等。

答案 1 :(得分:2)

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

然而,您将其定义为fun i a b = ...,它定义了一个接受参数的函数,然后返回另一个接受下一个参数的函数。它是fun i a = fn b => ...的快捷方式。它可以被称为i a b ()