Type class trait en Rust, typeclass en Haskell
Mecanismo de polimorfismo ad hoc — se define un conjunto de operaciones que un tipo debe soportar, y se implementan por separado para cada tipo.
Haskell inventó el concepto (Wadler y Blott, 1989). Rust lo copió con el nombre de "traits". Scala tiene el "patrón typeclass" mediante implicits / contextual abstractions. Ejemplo: la typeclass Show exige show :: a -> String; cualquier tipo que la implemente puede imprimirse. Se diferencia de una interfaz orientada a objetos en que (a) las implementaciones pueden ser externas (se añade una instancia después de definir el tipo), (b) el dispatch es estático (coste cero), y (c) los métodos de la typeclass pueden devolver el propio tipo abstracto (read :: String -> a). Ha influido en el diseño de buena parte de los lenguajes modernos.