System typów ML
Z Wikipedii
Języki rodziny ML (Ocaml, SML) mają silny system typów oparty na inferencji.
Podstawowy system typów jest następujący: istnieją typy proste, takie jak string, int, bool, unit (typ pusty) itd. Z dowolnych typów można też generować typy złożone - przez krotki (typ1 * typ2, typ1 * typ2 * typ3 itd.), konstruktory typów (typ list, typ tree itd.) i funkcje (typ1 -> typ2).
System próbuje nadać typy każdemu wyrażeniu języka, i nie licząc kilku rzadkich przypadków udaje mu się to całkiem dobrze.
Generalnie system taki wyklucza polimorfizm (nie licząc typów polimorficznych), jednak w SML stworzono specjalne reguły umożliwiające polimorfizm dla wyrażeń arytmetycznych.
System typów ML jest interesujący z teoretycznego punktu widzenia - wiele problemów ma bardzo wysoką złożoność, jednak w praktyce inferencja zachodzi bardzo szybko - typy, które są rzeczywiście używane, są zwykle bardzo proste - rzadko używa się funkcji rzędów wyższych niż trzeci-czwarty, oraz liczbie argumentów większej niż kilkanaście.
W rzeczywistych implementacjach dochodzą do tego bardziej złożone problemy typizacji obiektów, modułów itd.