如何在curried函数中使用指定数据类型?

时间:2016-02-03 23:06:11

标签: sml smlnj

我试图在SMLNJ中创建一个curried函数,将一个(string * bool)对附加到列表中。我能做到这一点:

fun push L a b = (a,b) :: L;
-val push = fn : ('a * 'b) list -> 'a -> 'b -> ('a * 'b) list

这有效,但我想要一个只接受(string * bool)列表,字符串和bool的函数。我无法弄清楚如何编写函数签名。

1 个答案:

答案 0 :(得分:3)

在函数定义中添加显式类型注释就足够了:

fun push L a b = (a:string,b:bool) :: L;

推断类型是

val push = fn : (string * bool) list -> string -> bool -> (string * bool) list

话虽如此 - 我不是不必要地使多态函数变得不那么多态的忠实粉丝。刚性类型检查不需要在效用函数的水平上。