Haskell has a sophisticated mechanism for overloading identifiers with multiple definitions at distinct types. Object-oriented programming has a similar notion of overriding and overloading for methods names. Unfortunately, it is not possible to encode object-oriented overloading directly using Haskell overloading. This deficiency becomes particularly tiresome when Haskell programs wish to call methods imported from an object-oriented library. We present two refinements of Haskell's type class system: Closed classes and overlapping instances. We demonstrate how we may exploit the refined system so as to be able to encode object-oriented classes within Haskell. This encoding allows us to mimic, within Haskell, the overloading resolution rules employed by object-oriented languages without the need for additional type annotations or name mangling. As a consequence, object-oriented class libraries are very convenient to import and use within Haskell. We thank Don Syme, Nick Benton, Andrew Kennedy, and the anonymous reviewers, for many helpful comments. © 2001 Published by Elsevier B.V.
Shields, M., & Peyton Jones, S. (2001). Object-oriented style overloading for haskell. In Electronic Notes in Theoretical Computer Science (Vol. 59, pp. 89–108). https://doi.org/10.1016/S1571-0661(05)80455-4