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.
- Replace the crazy string argument to
makeSuper
with something more sensible