A Nemerle támogatja a parametrikus polimorfizmust, vagyis a típussal való paraméterezést. Hasonlít a C# 2.0 és a Java 5.0 generikusaira, és kevéssé a C++ template-eire.
Metódusokat, osztályokat és a variant típust egyaránt lehet típussal paraméterezni. Szintaxisa mindegyik esetben azonos: a metódus vagy típus neve után szögletes zárójelben, vesszőkkel elválasztva felsoruljuk a típusváltozókat.
A következő példa egy azonos típusú elemekből álló lista definícióját mutatja be:
Itt T egy típusváltozó, mely a típusdefiníció törzsében ugyanúgy használható, mint bármely konkrét típusnév.
Generikus metódus vagy típus használatához szintén a szögletes zárójeles szintaxis követendő, de a név és a paraméterlista közé általában egy "." is írandó:
A típusparaméterek felsorolása általában el is hagyható, a típuskikövetkeztető rendszer az esetek többségében képes a típusparaméterek levezetésére.
Az alábbi példá egy típussal paraméterezett metódust definiál a fenti lista fejelemének lekérdezésére:
A típusparaméterekre vonatkozóan lehetőség van bizonyos megkötések specifikálására. Ezeket a where kulcsszó vezeti be. Az alábbi megszorítások használhatóak a Nemerlében:
Az alábbi példa egy olyan tetszőleges elemtípusú fát definiál, amelynek az elemeire megköveteljük a rendezhetőséget az IComparable interfészen keresztül:
Mivel a Tree típus paraméterére megköveteltük az IComparable interfész implementációját, természetesen meghívható egy Tree típusú érték elemeire a CompareTo metódus. A fordító gondoskodik arról, hogy a Tree generikus típust csak olyan típusparaméterrel lehessen példányosítani, amely implementálja az IComparable interfészt, ezáltal a CompareTo összehasonlító metódust is megvalósítja.
Lehetőség van egy típusparamétert kovariánsnak, illetve kontravariánsnak deklarálni.
Kovariáns típusparaméter esetén egy Example[A] típusú változónak értékül adható egy Example[B] típusú érték, ha B altípusa A-nak. Csak visszatérési érték típusaként használható. Deklarációnál a típusparaméter elé "+" jel kerül:
Kontravariáns típusparaméter esetén egy Example[B] típusú változónak értékül adható egy Example[A] típusú változó, ha B altípusa A-nak. Csak paraméter típusaként vagy generikus interfészekben használható. Deklarációnál a típusparaméter elé "-" jel kerül: