cluss: simple alternative to type classes

[ bsd3, constraints, library, type-system ] [ Propose Tags ]

A cluss enables you to achieve function overloading, or ad-hoc polymorphism, without creating a new type class.

In order to give ad-hoc polymorphism to a type variable a, you simply use In with a list of "type patterns" like In [Type T, ...] a, which indicates that the type matches some of the patterns; which is analogous to a type class indicating that a type matches some of its "instances". The constraint In [Type T, ...] a is what we call a "cluss".

Clusses can easily be used in a nested way and even be recursive; therefore, they are expressive enough to imitate Haskell-98-style type classes.

Clusses, however, go beyond a mere alternative to type classes. They have closed and prioritized instances and open methods, while type classes have open and unprioritized instances and closed methods. Those properties give clusses the advantages different from type classes:

  • You can judge whether a type a belongs to a cluss In as, on some level, writing Has as a, since cluss instances are closed.

  • You can make cluss instances more flexibly, without causing overlapping instances or incoherent instances, since cluss instances are prioritized.

  • You can create new methods for clusses anywhere in any module, since cluss methods are open.

More information can be found in the hackage's haddock or the updated haddock.


Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


  • No Candidates
Versions [RSS] 0.1, 0.2, 0.3
Dependencies base (>=4 && <5), template-haskell (>=2.5) [details]
License BSD-3-Clause
Copyright (c) Yusuke Matsushita 2014
Author Yusuke Matsushita
Maintainer Yusuke Matsushita <>
Revised Revision 4 made by Kinokkory at 2014-10-06T11:41:28Z
Category type system, constraints
Home page
Bug tracker
Source repo head: git clone
Uploaded by Kinokkory at 2014-10-06T11:27:47Z
Reverse Dependencies 2 direct, 0 indirect [details]
Downloads 3463 total (9 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs uploaded by user
Build status unknown [no reports yet]