Как да изведа тип функция в 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