Polimorfizm parametryczny Fragmenty programu mogą być parametryzowane typami lub po prostu nie precyzować typów danych, na jakich operują. Przeważnie w językach bez inferencji typów wprowadza się zmienną typową (czyli zmienną przebiegającą przestrzeń typów, a nie wartości jakiegoś typu), która zastępuje nazwę typu będącego parametrem, w parametryzowanym fragmencie. W językach z inferencją, po prostu nie podaje się typu, a system sam wykrywa, że np. dana funkcja może operować na dowolnym typie i sygnalizuje to obecnością zmiennych typowych w wyznaczonym typie.
Przykładem mogą być następujące konstrukcje znane z języków imperatywnych: szablony (ang. templates) w C++, klasy, typy, funkcje i metody generyczne (ang. generics), np. w językach Java, C#, Ada.
W zależności od używanego języka specjalizacja uogólnionego algorytmu może być przeprowadzana automatycznie przez kompilator (C++), w innych językach (Ada) specjalizacja musi być podana jawnie, w jeszcze innych (Java) implementacja jest wspólna, a sprawdzane są jedynie deklarowane typy podczas kompilacji.
W językach funkcyjnych polimorfizm parametryczny jest bardzo często stosowany. Najprostszym przykładem funkcji polimorficznej jest identyczność: let id = fun x=x