Typklasse
Mechanismus für Ad-hoc-Polymorphie — man definiert eine Menge von Operationen, die ein Typ unterstützen muss, und implementiert sie für verschiedene Typen getrennt.
Haskell erfand das Konzept (Wadler & Blott, 1989). Rust übernahm es als „Traits", Scala kennt das „Typeclass-Pattern" über Implicits bzw. kontextuelle Abstraktionen. Beispiel: Die Typklasse Show verlangt show :: a -> String; jeder Typ, der sie implementiert, lässt sich ausgeben. Der Unterschied zum objektorientierten Interface: (a) Implementierungen können extern hinzugefügt werden, auch nachträglich für einen bereits definierten Typ, (b) statischer Dispatch ohne Laufzeitkosten, (c) Typklassenmethoden können den abstrakten Typ selbst zurückgeben (read :: String -> a). Ein prägender Einfluss auf moderne Sprachdesigns.