Artículo

Improving typeclass relations by being open

Martínez, Guido Icon; Jaskelioff, Mauro Javier Icon; De Luca, Guido

Otros responsables

Fecha

09/2018

Editorial

Association for Computing Machinery

Revista

Acm Sigplan Notices

Título del libro

Nombre del evento

Fecha del evento

Institución organizadora

ISSN

0362-1340

eISSN

ISBN

Idioma

Inglés

Tipo del evento

Clasificación temática

Resumen

Mathematical concepts such as monads, functors, monoids, and semigroups are expressed in Haskell as typeclasses. Therefore, in order to exploit relations such as every monad is a functor, and every monoid is a semigroup, we need to be able to also express relations between typeclasses. Currently, the only way to do so is using superclasses. However, superclasses can be problematic due to their closed nature. Adding a superclass implies modifying the subclass definition, which is either impossible if one does not own such code, or painful as it requires cascading changes and the introduction of boilerplate throughout the codebase. In this article, we introduce class morphisms, a way to relate classes in an open fashion, without changing class definitions. We show how class morphisms improve the expressivity, conciseness, and maintainability of code. Further, we show how to implement them while maintaining canonicity and coherence, two key properties of the Haskell type system. Extending a typechecker with class morphisms amounts to adding an elaboration phase and is an unintrusive change. We back this claim with a prototype extension of GHC.

Aprobación

Revisión

Complementado por

Referenciado por

Licencia Creative Commons

Excepto donde se indique lo contrario, la licencia de este ítem se describe como by-nc-sa