superconstraints: Access an instance's constraints

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

Constraint manipulation

[Skip to Readme]


Versions 0.0.1, 0.0.2, 0.0.2
Change log None available
Dependencies base (>=4.9.1 && <4.10), constraints (>=0.9.1 && <0.10), containers (>= && <0.6), haskell-src-meta (>= && <0.8), mtl (>=2.2.1 && <2.3), tagged (>=0.8.5 && <0.9), template-haskell (>=2.11.1 && <2.12), type-eq (>=0.5 && <0.6) [details]
License BSD-3-Clause
Copyright Copyright (C) 2013 Ryan Trinkle
Author Ryan Trinkle
Maintainer Ryan Trinkle <>
Category Constraints
Home page
Bug tracker
Source repo head: git clone
Uploaded by RyanTrinkle at 2017-05-28T21:07:12Z




Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Readme for superconstraints-0.0.2

[back to package description]


A way of inferring instance constraints given an instance.

Suppose you have a class like this:

class C a

instance C a => C [a]

Normally, given C [a], you cannot obtain C a; however, superconstraints allows you to add that capability:

class HasSuper (C a) => C a

instance C a => C [a]
makeSuper "C [a]"

Then, you can retrieve the superconstraint by doing:

case super (Proxy :: Proxy (C [a])) of
  Dict -> ...

The superconstraint dictionary will include all of the constraints required by the instance.

Future Improvements