+2      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./01(C) 2011-2015 Edward Kmett, BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> experimental non-portable Trustworthy%&*/09:;<=?DEOQRTGReify the relationship between an instance head and its body as a classGiven a definition such as instance Foo a => Foo [a] Lyou can capture the relationship between the instance head and its body with instance Foo a  Foo [a] where  =    PReify the relationship between a class and its superclass constraints as a classGiven a definition such as class Foo a => Bar a Pyou can capture the relationship between 'Bar a' and its superclass 'Foo a' with  instance  (Foo a) (Bar a) where  =    ,Now the user can use 'cls :: Bar a :- Foo a'Any inhabits every kind, including @ but is uninhabited, making it impossible to define an instance.This is the type of entailment.a  b is read as a "entails" b./With this we can actually build a category for  resolution.e.g.Because 2 a is a superclass of 3 a, we can show that 3 a entails 2 a.Because  instance 3 a => 3 [a] exists, we can show that 3 a entails 3 [a] as well.%This relationship is captured in the  entailment type here.Since p  p and entailment composes,  forms the arrows of a 4 of constraints. However, 4v only because sufficiently general to support this instance in GHC 7.8, so prior to 7.8 this instance is unavailable.ABut due to the coherence of instance resolution in Haskell, this 4D has some very interesting properties. Notably, in the absence of IncoherentInstances, this category is "thin", which is to say that between any two objects (constraints) there is at most one distinguishable arrow.HThis means that for instance, even though there are two ways to derive 3 a  2 [a], the answers from these two paths _must_ by construction be equal. This is a property that Haskell offers that is pretty much unique in the space of languages with things they call "type classes".What are the two ways?Well, we can go from 3 a  2 a1 via the superclass relationship, and them from 2 a  2 [a]& via the instance, or we can go from 3 a  3 [a] via the instance then from 3 [a]  2 [a]T through the superclass relationship and this diagram by definition must "commute".Diagrammatically,  Ord a ins / \ cls v v Ord [a] Eq a cls \ / ins v v Eq [a]This safety net ensures that pretty much anything you can write with this library is sensible and can't break any assumptions on the behalf of library authors. Values of type   p/ capture a dictionary for a constraint of type p.e.g.   ::   (2 5) -captures a dictionary that proves we have an:  instance 2 'Int Pattern matching on the  1 constructor will bring this instance into scope.  Given that a :- b(, derive something that needs a context b, using the context a Transitivity of entailment If we view ()0 as a Constraint-indexed category, then this is (6) Reflexivity of entailment If we view ()0 as a Constraint-indexed category, then this is 7 due to the hack for the kind of (,)E in the current version of GHC we can't actually make instances for -(,) :: Constraint -> Constraint -> Constraint, but (,)R is a bifunctor on the category of constraints. This lets us map over both sides.Weakening a constraint productDThe category of constraints is Cartesian. We can forget information.Weakening a constraint productDThe category of constraints is Cartesian. We can forget information.,Contracting a constraint / diagonal morphismCThe category of constraints is Cartesian. We can reuse information.Constraint product 7trans weaken1 (f &&& g) = f trans weaken2 (f &&& g) = gEvery constraint implies truth3These are the terminal arrows of the category, and () is the terminal object.9Given any constraint there is a unique entailment of the ()! constraint from that constraint.-This demonstrates the law of classical logic 3http://en.wikipedia.org/wiki/Principle_of_explosion"ex falso quodlibet"$Apply an entailment to a dictionary.&From a category theoretic perspective  J is a functor that maps from the category of constraints (with arrows in -) to the category Hask of Haskell data types.WThis functor is fully faithful, which is to say that given any function you can write Dict a -> Dict b! there also exists an entailment a :- b4 in the category of constraints that you can build.Assumes IncoherentInstances doesn't exist.Assumes IncoherentInstances doesn't exist.Possible since GHC 7.8, when 4 was made polykinded.8 9:;<  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~    8  9:;<  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~9 9  1(C) 2015 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> experimental non-portableSafe %&*0DOQRT>Allow an attempt at resolution of a constraint at a later time Resolve a $ constraint with observable failure.cDefer a constraint for later resolution in a context where we want to upgrade failure into an error => =>C(C) 2011-2015 Edward Kmett, (C) 2015 rjan Johansen BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> experimental non-portable Trustworthy*+9;<=DQRT.A representation of the quantified constraint forall f a. p (t f a)..A representation of the quantified constraint forall a. p (f a)..A representation of the quantified constraint  forall a. p a.Instantiate a quantified  p constraint at type a.Instantiate a quantified  p f constraint at type a.,Instantiate a quantified constraint on kind * -> *. This is now redundant since  became polykinded.Instantiate a quantified  p t constraint at types f and a.?@ABCDE?@ABCDENone*+69;<=DOQRT`      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,^      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,(C) 2011-2015 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> experimental non-portableUnsafe %&*9;OQRT-5Coerce a dictionary unsafely from one type to another.DCoerce a dictionary unsafely from one type to a newtype of that type/FCoerce a dictionary unsafely from a newtype of a type to the base type0.Construct an Applicative instance from a Monad12Construct an Alternative instance from a MonadPlus-./01-./01-./01-./01F      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./01234567898:;<=>;<?;<@ABCDEFGHIJKLMNO&constraints-0.8-4c3b6cnEJINLrFZUA2mlxrData.ConstraintData.Constraint.UnsafeData.Constraint.DeferrableData.Constraint.ForallData.Constraint.Liftingghc-prim GHC.Types Constraint Coercible:=>insClassclsBottom:-SubDict\\transrefl***weaken1weaken2contract&&&topbottommapDict unmapDict $fMonoidDict $f:=>aMonoid $f:=>aRead $fBoundedDict $f:=>aBounded $fEnumDict $f:=>aEnum$f:=>(%%)MonadPlus$f:=>(%%)MonadPlus0$fClassMonadMonadPlus$f:=>(%%)Monad$f:=>(%%)Monad0$f:=>(%%)Monad1$f:=>(%%)Monad2$fClass(%%)Monad$f:=>MonadPlusAlternative$f:=>(%%)Alternative$f:=>(%%)Alternative0$fClassApplicativeAlternative$f:=>MonadApplicative$f:=>MonoidApplicative$f:=>(%%)Applicative$f:=>(%%)Applicative0$f:=>(%%)Applicative1$f:=>(%%)Applicative2$f:=>(%%)Applicative3$fClassFunctorApplicative$f:=>MonadFunctor$f:=>(%%)Functor$f:=>(%%)Functor0$f:=>(%%)Functor1$f:=>(%%)Functor2$f:=>(%%)Functor3$f:=>(%%)Functor4$fClass(%%)Functor$f:=>(%,%)Monoid$f:=>MonoidMonoid$f:=>(%%)Monoid$f:=>(%%)Monoid0$f:=>(%%)Monoid1$fClass(%%)Monoid$f:=>(%%)RealFloat$f:=>(%%)RealFloat0$fClass(%,%)RealFloat$f:=>IntegralRealFrac$f:=>(%%)RealFrac$f:=>(%%)RealFrac0$fClass(%,%)RealFrac$f:=>RealFloatFloating$f:=>(%%)Floating$f:=>(%%)Floating0$fClassFractionalFloating$f:=>IntegralFractional$f:=>RealFloatFractional$f:=>(%%)Fractional$f:=>(%%)Fractional0$fClassNumFractional$f:=>(%%)Integral$f:=>(%%)Integral0$fClass(%,%)Integral$f:=>IntegralReal $f:=>(%%)Real$f:=>(%%)Real0$f:=>(%%)Real1$f:=>(%%)Real2$fClass(%,%)Real$f:=>IntegralNum$f:=>RealFloatNum $f:=>(%%)Num $f:=>(%%)Num0 $f:=>(%%)Num1 $f:=>(%%)Num2$fClass(%%)Num$f:=>(%,%)Bounded$f:=>(%%)Bounded$f:=>(%%)Bounded0$f:=>(%%)Bounded1$f:=>(%%)Bounded2$f:=>(%%)Bounded3$fClass(%%)Bounded$f:=>IntegralEnum $f:=>(%%)Enum$f:=>(%%)Enum0$f:=>(%%)Enum1$f:=>(%%)Enum2$f:=>(%%)Enum3$f:=>(%%)Enum4$f:=>(%%)Enum5$f:=>(%%)Enum6$fClass(%%)Enum$f:=>(%,%)Read$f:=>(%,%)Read0$f:=>(%,%)Read1 $f:=>ReadRead$f:=>ReadRead0$f:=>ReadRead1 $f:=>(%%)Read$f:=>(%%)Read0$f:=>(%%)Read1$f:=>(%%)Read2$fClass(%%)Read $f:=>(%%)Show$f:=>(%%)Show0$f:=>(%,%)Show$f:=>(%,%)Show0$f:=>(%,%)Show1 $f:=>ShowShow$f:=>ShowShow0$f:=>ShowShow1$f:=>(%%)Show1$f:=>(%%)Show2$f:=>(%%)Show3$f:=>(%%)Show4$fClass(%%)Show $f:=>(%%)Ord $f:=>(%%)Ord0$f:=>IntegralOrd $f:=>(%,%)Ord$f:=>(%,%)Ord0 $f:=>OrdOrd $f:=>OrdOrd0 $f:=>(%%)Ord1 $f:=>(%%)Ord2 $f:=>(%%)Ord3 $f:=>(%%)Ord4 $f:=>(%%)Ord5 $f:=>(%%)Ord6 $f:=>(%%)Ord7 $fClassEqOrd $f:=>(%%)Eq $f:=>(%%)Eq0 $f:=>(%,%)Eq $f:=>(%,%)Eq0 $f:=>EqEq $f:=>EqEq0 $f:=>EqEq1 $f:=>EqEq2 $f:=>(%%)Eq1 $f:=>(%%)Eq2 $f:=>(%%)Eq3 $f:=>(%%)Eq4 $f:=>(%%)Eq5 $f:=>(%%)Eq6 $fClass(%%)Eq $f:=>(%%)(%%)$fClass(%%)(%%) $f:=>(%%):=>$f:=>(%%)Class$fClass(%%):=>$fClass(%%)Class$fShow:-$fOrd:-$fEq:-$fCategoryConstraint:-$fData:- $fDataDict $fReadDict $fShowDict $fOrdDict$fEqDict Deferrable deferEitherUnsatisfiedConstraintdeferdeferred$fDeferrable(%,,%)$fDeferrable(%,%) $fDeferrable~ $fExceptionUnsatisfiedConstraint$fShowUnsatisfiedConstraintForallTForall1ForallFForallinstinstFinst1instT$fForallT_k2k1k3pt$fForallF_k1k2pf $fForall_kpLifting2lifting2Liftinglifting$fLifting2(->)Read1Sum$fLifting2(->)Ord1Sum$fLifting2(->)Eq1Sum$fLifting2(->)Show1Sum$fLifting2(->)TraversableSum$fLifting2(->)FoldableSum$fLifting2(->)FunctorSum$fLifting2(->)Read1Product$fLifting2(->)Ord1Product$fLifting2(->)Eq1Product$fLifting2(->)Show1Product$fLifting2(->)MonadFixProduct$fLifting2(->)MonadPlusProduct$fLifting2(->)MonadProduct $fLifting2(->)AlternativeProduct $fLifting2(->)ApplicativeProduct $fLifting2(->)TraversableProduct$fLifting2(->)FoldableProduct$fLifting2(->)FunctorProduct $fLifting2(->)AlternativeCompose $fLifting2(->)ApplicativeCompose $fLifting2(->)TraversableCompose$fLifting2(->)FoldableCompose$fLifting2(->)FunctorCompose$fLifting2TYPEIx(,)$fLifting2TYPEBounded(,)$fLifting2TYPEMonoid(,)$fLifting2TYPENFData(,)$fLifting2TYPEBinary(,)$fLifting2TYPEHashable(,)$fLifting2TYPERead(,)$fLifting2TYPEShow(,)$fLifting2TYPEOrd(,)$fLifting2TYPEEq(,)$fLifting2TYPENFDataEither$fLifting2TYPEBinaryEither$fLifting2TYPEHashableEither$fLifting2TYPEReadEither$fLifting2TYPEShowEither$fLifting2TYPEOrdEither$fLifting2TYPEEqEither$fLifting(->)MonadStateContT$fLifting(->)MonadStateErrorT$fLifting(->)MonadStateExceptT$fLifting(->)MonadStateReaderT$fLifting(->)MonadStateWriterT$fLifting(->)MonadStateWriterT0 $fLifting(->)MonadStateIdentityT$fLifting(->)MonadStateListT$fLifting(->)MonadStateMaybeT$fLifting(->)MonadReaderContT$fLifting(->)MonadReaderErrorT$fLifting(->)MonadReaderExceptT$fLifting(->)MonadReaderStateT$fLifting(->)MonadReaderStateT0$fLifting(->)MonadReaderWriterT $fLifting(->)MonadReaderWriterT0!$fLifting(->)MonadReaderIdentityT$fLifting(->)MonadReaderListT$fLifting(->)MonadReaderMaybeT$fLifting(->)MonadRWSExceptT$fLifting(->)MonadRWSErrorT$fLifting(->)MonadRWSIdentityT$fLifting(->)MonadRWSMaybeT$fLifting(->)MonadErrorRWST$fLifting(->)MonadErrorRWST0$fLifting(->)MonadErrorReaderT$fLifting(->)MonadErrorStateT$fLifting(->)MonadErrorStateT0$fLifting(->)MonadErrorWriterT$fLifting(->)MonadErrorWriterT0 $fLifting(->)MonadErrorIdentityT$fLifting(->)MonadErrorListT$fLifting(->)MonadErrorMaybeT$fLifting(->)MonadContRWST$fLifting(->)MonadContRWST0$fLifting(->)MonadContReaderT$fLifting(->)MonadContStateT$fLifting(->)MonadContStateT0$fLifting(->)MonadContExceptT$fLifting(->)MonadContErrorT$fLifting(->)MonadContWriterT$fLifting(->)MonadContWriterT0$fLifting(->)MonadContIdentityT$fLifting(->)MonadContListT$fLifting(->)MonadContMaybeT$fLiftingTYPEReadIdentity$fLiftingTYPEShowIdentity$fLiftingTYPEOrdIdentity$fLiftingTYPEEqIdentity$fLiftingTYPEEqLift$fLiftingTYPEOrdLift$fLiftingTYPEReadLift$fLiftingTYPEShowLift$fLifting(->)Eq1Lift$fLifting(->)Ord1Lift$fLifting(->)Read1Lift$fLifting(->)Show1Lift$fLifting(->)AlternativeLift$fLifting(->)ApplicativeLift$fLifting(->)TraversableLift$fLifting(->)FoldableLift$fLifting(->)FunctorLift$fLiftingTYPEEqBackwards$fLiftingTYPEOrdBackwards$fLiftingTYPEReadBackwards$fLiftingTYPEShowBackwards$fLifting(->)Eq1Backwards$fLifting(->)Ord1Backwards$fLifting(->)Read1Backwards$fLifting(->)Show1Backwards!$fLifting(->)AlternativeBackwards!$fLifting(->)ApplicativeBackwards!$fLifting(->)TraversableBackwards$fLifting(->)FoldableBackwards$fLifting(->)FunctorBackwards$fLiftingTYPEEqReverse$fLiftingTYPEOrdReverse$fLiftingTYPEReadReverse$fLiftingTYPEShowReverse$fLifting(->)Eq1Reverse$fLifting(->)Ord1Reverse$fLifting(->)Read1Reverse$fLifting(->)Show1Reverse$fLifting(->)TraversableReverse$fLifting(->)FoldableReverse$fLifting(->)AlternativeReverse$fLifting(->)ApplicativeReverse$fLifting(->)FunctorReverse$fLiftingTYPEEqMaybeT$fLiftingTYPEOrdMaybeT$fLiftingTYPEReadMaybeT$fLiftingTYPEShowMaybeT$fLifting(->)Eq1MaybeT$fLifting(->)Ord1MaybeT$fLifting(->)Read1MaybeT$fLifting(->)Show1MaybeT$fLifting(->)MonadIOMaybeT$fLifting(->)TraversableMaybeT$fLifting(->)FoldableMaybeT$fLifting(->)MonadPlusMaybeT$fLifting(->)MonadMaybeT$fLifting(->)FunctorMaybeT$fLiftingTYPEEqListT$fLiftingTYPEOrdListT$fLiftingTYPEReadListT$fLiftingTYPEShowListT$fLifting(->)Eq1ListT$fLifting(->)Ord1ListT$fLifting(->)Read1ListT$fLifting(->)Show1ListT$fLifting(->)MonadIOListT$fLifting(->)TraversableListT$fLifting(->)FoldableListT$fLifting(->)MonadPlusListT$fLifting(->)MonadListT$fLifting(->)AlternativeListT$fLifting(->)ApplicativeListT$fLifting(->)FunctorListT$fLiftingTYPEEqIdentityT$fLiftingTYPEOrdIdentityT$fLiftingTYPEReadIdentityT$fLiftingTYPEShowIdentityT$fLifting(->)Eq1IdentityT$fLifting(->)Ord1IdentityT$fLifting(->)Read1IdentityT$fLifting(->)Show1IdentityT$fLifting(->)MonadIOIdentityT!$fLifting(->)TraversableIdentityT$fLifting(->)FoldableIdentityT$fLifting(->)MonadFixIdentityT$fLifting(->)MonadPlusIdentityT$fLifting(->)MonadIdentityT!$fLifting(->)AlternativeIdentityT!$fLifting(->)ApplicativeIdentityT$fLifting(->)FunctorIdentityT$fLifting(->)MonadIOContT$fLifting(->)MonadContT$fLifting(->)ApplicativeContT$fLifting(->)FunctorContT$fLiftingTYPEReadWriterT$fLiftingTYPEOrdWriterT$fLiftingTYPEEqWriterT$fLiftingTYPEShowWriterT$fLifting(->)Read1WriterT$fLifting(->)Ord1WriterT$fLifting(->)Eq1WriterT$fLifting(->)Show1WriterT$fLifting(->)MonadIOWriterT$fLifting(->)TraversableWriterT$fLifting(->)FoldableWriterT$fLifting(->)MonadPlusWriterT$fLifting(->)MonadFixWriterT$fLifting(->)MonadWriterT$fLifting(->)AlternativeWriterT$fLifting(->)ApplicativeWriterT$fLifting(->)FunctorWriterT$fLiftingTYPEReadWriterT0$fLiftingTYPEOrdWriterT0$fLiftingTYPEEqWriterT0$fLiftingTYPEShowWriterT0$fLifting(->)Read1WriterT0$fLifting(->)Ord1WriterT0$fLifting(->)Eq1WriterT0$fLifting(->)Show1WriterT0$fLifting(->)MonadIOWriterT0 $fLifting(->)TraversableWriterT0$fLifting(->)FoldableWriterT0$fLifting(->)MonadPlusWriterT0$fLifting(->)MonadFixWriterT0$fLifting(->)MonadWriterT0 $fLifting(->)AlternativeWriterT0 $fLifting(->)ApplicativeWriterT0$fLifting(->)FunctorWriterT0$fLiftingTYPEReadExceptT$fLiftingTYPEOrdExceptT$fLiftingTYPEEqExceptT$fLiftingTYPEShowExceptT$fLifting(->)Read1ExceptT$fLifting(->)Ord1ExceptT$fLifting(->)Eq1ExceptT$fLifting(->)Show1ExceptT$fLifting(->)MonadIOExceptT$fLifting(->)MonadPlusExceptT$fLifting(->)MonadFixExceptT$fLifting(->)MonadExceptT$fLifting(->)TraversableExceptT$fLifting(->)FoldableExceptT$fLifting(->)FunctorExceptT$fLiftingTYPEReadErrorT$fLiftingTYPEOrdErrorT$fLiftingTYPEEqErrorT$fLiftingTYPEShowErrorT$fLifting(->)Read1ErrorT$fLifting(->)Ord1ErrorT$fLifting(->)Eq1ErrorT$fLifting(->)Show1ErrorT$fLifting(->)MonadIOErrorT$fLifting(->)MonadPlusErrorT$fLifting(->)MonadFixErrorT$fLifting(->)MonadErrorT$fLifting(->)TraversableErrorT$fLifting(->)FoldableErrorT$fLifting(->)FunctorErrorT$fLifting(->)MonadIOReaderT$fLifting(->)MonadFixReaderT$fLifting(->)MonadPlusReaderT$fLifting(->)MonadReaderT$fLifting(->)AlternativeReaderT$fLifting(->)ApplicativeReaderT$fLifting(->)FunctorReaderT$fLifting(->)MonadIORWST$fLifting(->)MonadPlusRWST$fLifting(->)MonadFixRWST$fLifting(->)MonadRWST$fLifting(->)FunctorRWST$fLifting(->)MonadIORWST0$fLifting(->)MonadPlusRWST0$fLifting(->)MonadFixRWST0$fLifting(->)MonadRWST0$fLifting(->)FunctorRWST0$fLifting(->)MonadPlusStateT$fLifting(->)MonadIOStateT$fLifting(->)MonadFixStateT$fLifting(->)MonadStateT$fLifting(->)FunctorStateT$fLifting(->)MonadPlusStateT0$fLifting(->)MonadIOStateT0$fLifting(->)MonadFixStateT0$fLifting(->)MonadStateT0$fLifting(->)FunctorStateT0$fLiftingTYPEShowSum$fLiftingTYPEReadSum$fLiftingTYPEOrdSum$fLiftingTYPEEqSum$fLifting(->)Read1Sum$fLifting(->)Ord1Sum$fLifting(->)Eq1Sum$fLifting(->)Show1Sum$fLifting(->)TraversableSum$fLifting(->)FoldableSum$fLifting(->)FunctorSum$fLiftingTYPEShowProduct$fLiftingTYPEReadProduct$fLiftingTYPEOrdProduct$fLiftingTYPEEqProduct$fLifting(->)Read1Product$fLifting(->)Ord1Product$fLifting(->)Eq1Product$fLifting(->)Show1Product$fLifting(->)MonadPlusProduct$fLifting(->)MonadFixProduct$fLifting(->)MonadProduct$fLifting(->)AlternativeProduct$fLifting(->)ApplicativeProduct$fLifting(->)TraversableProduct$fLifting(->)FoldableProduct$fLifting(->)FunctorProduct$fLiftingTYPEShowCompose$fLiftingTYPEReadCompose$fLiftingTYPEOrdCompose$fLiftingTYPEEqCompose$fLifting(->)Read1Compose$fLifting(->)Ord1Compose$fLifting(->)Eq1Compose$fLifting(->)Show1Compose$fLifting(->)AlternativeCompose$fLifting(->)ApplicativeCompose$fLifting(->)TraversableCompose$fLifting(->)FoldableCompose$fLifting(->)FunctorCompose$fLiftingTYPEIx(,)$fLiftingTYPEBounded(,)$fLiftingTYPEMonoid(,)$fLiftingTYPENFData(,)$fLiftingTYPEBinary(,)$fLiftingTYPEHashable(,)$fLiftingTYPERead(,)$fLiftingTYPEShow(,)$fLiftingTYPEOrd(,)$fLiftingTYPEEq(,)$fLiftingTYPENFDataEither$fLiftingTYPEBinaryEither$fLiftingTYPEHashableEither$fLiftingTYPEReadEither$fLiftingTYPEShowEither$fLiftingTYPEOrdEither$fLiftingTYPEEqEither$fLiftingTYPEMonoid(->)$fLiftingTYPEShowComplex$fLiftingTYPEReadComplex$fLiftingTYPEEqComplex$fLiftingTYPEEqRatio$fLiftingTYPEMonoidMaybe$fLiftingTYPENFDataMaybe$fLiftingTYPEBinaryMaybe$fLiftingTYPEHashableMaybe$fLiftingTYPEReadMaybe$fLiftingTYPEShowMaybe$fLiftingTYPEOrdMaybe$fLiftingTYPEEqMaybe$fLiftingTYPENFData[]$fLiftingTYPEBinary[]$fLiftingTYPEHashable[]$fLiftingTYPERead[]$fLiftingTYPEShow[]$fLiftingTYPEOrd[]$fLiftingTYPEEq[]unsafeCoerceConstraint unsafeDeriveunsafeUnderiveunsafeApplicativeunsafeAlternative GHC.ClassesEqOrdbaseControl.CategoryCategoryInt.idno dictConstr dictDataType subConstr subDataType:~:ReflForallT_ForallF_Forall_SkolemT2SkolemT1SkolemFSkolem