Имам функция 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