która jest typu gdzie jest zmienną typową. Funkcję można zaaplikować do argumentu dowolnego typu, a otrzymany wynik będzie tego samego typu co argument. Ciekawszym przypadkiem może być funkcja let app = fun f x -> f x
typu które przyjmuje jako parametry dowolną funkcję oraz wartość której typ zgadza się z typem wejściowym funkcji z pierwszego parametru; zwraca natomiast wartość typu zgodnego z wynikiem funkcji z pierwszego parametru.
Polimorfizm inkluzyjny Zakłada istnienie zwrotnej i przechodniej relacji (praporządku) na typach: mówimy wtedy, że jest podtypem (typem podrzędnym, ang. subtype) a nadtypem (typem nadrzędnym, ang. supertype) W miejscu gdzie oczekiwana jest wartość typu nadrzędnego, może być dostarczona wartość podtypu. Przykładem polimorfizmu inkluzyjnego mogą być podtypowanie i dziedziczenie, które w ogólnym przypadku tworzą dwie niezależne hierarchie.
Polimorfizm ograniczeniowy Rozszerzeniem zwykłego polimorfizmu parametrycznego jest możliwość nakładania pewnych ograniczeń na parametr typowy. Operacje wykonywane przez sparametryzowaną konstrukcję, mogą polegać na jakiejś właściwości danych, na których pracują.