Как вывести тип функции в SML(fun foo f=f 5;)

У меня есть функция foo, определенная следующим образом

fun foo f = f 5;

Как вывести тип функции?


sml
person sam    schedule 16.09.2013    source источник


Ответы (2)


Мы видим, что f должна быть функцией. Мы также видим, что f принимает на вход целое число, так как мы вызываем f 5. Поэтому f должен иметь тип int -> 'a.

foo затем берет int -> 'a и производит 'a, что дает: foo : (int -> 'a) -> 'a.

person Sebastian Paaske Tørholm    schedule 16.09.2013

SML использует вариант этого алгоритма для определения типа:

http://en.wikipedia.org/wiki/Hindley%E2%80%93Milner

person seanmcl    schedule 17.09.2013