У меня есть функция foo, определенная следующим образом
fun foo f = f 5;
Как вывести тип функции?
У меня есть функция foo, определенная следующим образом
fun foo f = f 5;
Как вывести тип функции?
Мы видим, что f
должна быть функцией. Мы также видим, что f принимает на вход целое число, так как мы вызываем f 5
. Поэтому f
должен иметь тип int -> 'a
.
foo
затем берет int -> 'a
и производит 'a
, что дает: foo : (int -> 'a) -> 'a
.
SML использует вариант этого алгоритма для определения типа:
http://en.wikipedia.org/wiki/Hindley%E2%80%93Milner