## superconstraints A way of inferring instance constraints given an instance. Suppose you have a class like this: ```haskell 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: ```haskell class HasSuper (C a) => C a instance C a => C [a] makeSuper "C [a]" ``` Then, you can retrieve the superconstraint by doing: ```haskell case super (Proxy :: Proxy (C [a])) of Dict -> ... ``` The superconstraint dictionary will include all of the constraints required by the instance. ### Future Improvements * Replace the crazy string argument to `makeSuper` with something more sensible