2016-02-03 5 views
1

Я пытаюсь сделать валютную функцию в SMLNJ, которая добавляет пару (string * bool) в список. Я мог бы сделать это:Как использовать определенные типы данных в curried-функции?

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

Это работает, но я хочу функцию, которая принимает только (строку * Ий) список, строку и логическое значение. Я не могу понять, как написать подпись функции.

ответ

3

Достаточно добавить явное аннотацию типа в определении функции:

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

выведенный тип является

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

Сказав, что - я не большой поклонник понапрасну решений полиморфные функции менее полиморфны. Жесткий контроль типов не должен находиться на уровне функций полезности.