Típus paraméterrel definiálhatunk függvényeket és típusokat. Egyszerűen a definíciónál név után "<> " közé kell írni a típusparamétereket. Példányosításnál nem szükséges kiírni a típusokat, mert a fordító ki tudja következtetni. A típus változók átlátszatlanok: korlátozott műveleteket lehet végezni és nem használhatóak minta illesztésben.
A fordító hatékonyan fordítja, monomorphizing: Minden generikus függvény hívásához generál egy külön másolatot és a konkrét híváshoz optimalizálja Hasonló hatékonyság, mint a C++ template-k.
Korlátozza a generikus típusparamétereket. Leszűkíti a típusparaméterek lehetséges értékeit aszerint, hogy milyen függvényeket kell megvalósítaniuk, ezáltal biztonságosabbé téve a használatukat.
Például ha van egy generikus metódusunk T típusparaméterrel, és vár egy T típusú paramétert, akkor ha azt a T típusú paramétert másolni akarjuk a függvény törzsében a fordító jelezni fog, hogy ez nem megy. Ahhoz, hogy működjön megkell határozni, hogy a T típus megvalósítja a Clone trait-et:
Számos beépített trait van: pl. Clone (másolhatóság), Drop (destruktor).
A beépített trait-eken kívül, mi is megadhatunk új trait-eket. Először megkell adni a trait szignatúráját, benne a megvalósított függvényekkel.
Majd a típushoz megkell adni az implementációt egy impl blokkban, mint a metódusoknál. Használni pedig például így: "a".print()
Sokszor előfordulhat, hogy egy trait funkciójának megvalósítása sok típusra ugyan az lesz. Ekkor a kódismétlés elkerülésére megadhatunk a trait definíciójakor egy alapértelmezett függvény definíciót amit akkor használunk amikor egy típushoz az implementációs blokk üres. De ha szükséges nyílván felül is lehet definiálni.
Trait-eket is adhatunk meg típusparaméterrel. Ekkor ezt a típus paramétert a trait által biztosított függvényekben felhasználhatjuk.
Illetve a típusparamétert nem is feltétlenül kell kiírni, erre van egy speciális Self típus.
Static metódusokat is megadhatunk, ha az első paraméter nem self. Ezeket a trait név::függvény névvel érhetjük el.
Trait öröklődhet másikból. a leszármazott trait-et megvalósító típusnak, implementálnia kell a bázis trait-et is. Polimorfikusan használhatóak: ahol bázis trait-et várnának ott adhatunk leszármazottat is. Többszörös öröklődés van, +-al kell elválasztani a bázisokat. Szintaxis: trait név után kell írni a bázis trait-et.
Az std és extra könyvtárban található trait-ekből néhányhoz lehet az implementációt származtatni a saját típusainknak: Eq, TotalEq, Ord, TotalOrd, Encodable Decodable, Clone, DeepClone, IterBytes, Rand, Default, Zero, ToStr