令人困惑的类型声明?

时间:2011-05-10 17:36:40

标签: sml smlnj

我有一段时间没有使用SML,我遇到了这行代码:

type memory = string -> int;

这会将'memory'定义为一个函数,它接受一个字符串a返回一个int,或者完全不同的东西?我已经搜索了类似的声明,但我似乎无法找到它或弄清楚它的作用。

当我把它放入SML / NJ时,我得到了这个:

- type memory = string -> int;
type memory = string -> int

1 个答案:

答案 0 :(得分:8)

memory不是函数,它只是一个类型的缩写,它是一个函数,它将字符串作为输入并返回一个int。 因此,无论何时您想要写出string->int类型的内容,您都可以将其写为memory类型。

例如,而不是写作:

- fun foo(f : string->int, s) = f s;
val foo = fn : (string -> int) * string -> int
你可以写:

- fun foo( f: memory, s) = f s;
val foo = fn : memory * string -> int

此类type声明可以使您的代码更具可读性(例如,您可以创建一个缩写,而不是写x对类型为int*int (x: int*int) type pair = int*int然后您可以写x类型为pair的{​​{1}}}。