0&       non-portable experimentalEdward Kmett <ekmett@gmail.com> Trustworthy HReify the relationship between an instance head and its body as a class QReify the relationship between a class and its superclass constraints as a class ,Capture a dictionary for a given constraint  Given that a :- b(, derive something that needs a context b, using the context a Hdue to the hack for the kind of (,) in the current version of GHC we can' t actually B make instances for (,) :: Constraint -> Constraint -> Constraint Weakening a constraint product Weakening a constraint product Contracting a constraint / diagonal morphism Constraint product  trans weaken1 (f &&& g) = f  trans weaken2 (f &&& g) = g Transitivity of entailment  If we view '(:-)'0 as a Constraint-indexed category, then this is '(.)' Reflexivity of entailment  If we view '(:-)'0 as a Constraint-indexed category, then this is   Every constraint implies truth NThese are the terminal arrows of the category, and () is the terminal object. 7A bad type coercion lets you derive any type you want. SThese are the initial arrows of the category and (() ~ Bool) is the initial object /This demonstrates the law of classical logical  3http://en.wikipedia.org/wiki/Principle_of_explosionex falso quodlibet ! "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   ! "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ non-portable experimentalEdward Kmett <ekmett@gmail.com>Unsafe6Coerce a dictionary unsafely from one type to another ECoerce a dictionary unsafely from one type to a newtype of that type GCoerce a dictionary unsafely from a newtype of a type to the base type /Construct an Applicative instance from a Monad 3Construct an Alternative instance from a MonadPlus  non-portable experimentalEdward Kmett <ekmett@gmail.com> TrustworthyA quantified constraint ,instantiate a quantified constraint on kind * ,instantiate a quantified constraint on kind * -> *         !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~constraints-0.3.4.2Data.ConstraintData.Constraint.UnsafeData.Constraint.Forallghc-primGHC.Prim Constraint:=>insClasscls:-SubDict\\***weaken1weaken2contract&&&transrefltopbottomunsafeCoerceConstraint unsafeDeriveunsafeUnderiveunsafeApplicativeunsafeAlternativeForallTForall1ForallFForallinstinstFinst1instTbaseGHC.BaseidExfalso $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:-MFBA