úÎ83_      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^Unsafe'=JK)Very unsafe! The same rules apply as for _. Very unsafe! Very unsafe!UnsafeJK)Very unsafe! The same rules apply as for _.)Very unsafe! The same rules apply as for _. Very unsafe! Very unsafe! Trustworthy!"'+,234=HJKMEvidence that i; is the argument type of the outermost type constructor of a Evidence that f& is the outermost type constructor of a Evidence that a is the same type as b.The `, a, and b instances of Maybe4 are very useful for working with values of type Maybe (a :~: b).LCan be implemented by types storing evidence of type equalities, i.e. GADTs.A return value of NothingX can mean any of definite inequality, impossible arguments, or insufficient information.Minimal complete definition: maybeEq or (~~), plus either:piecewiseMaybeEq, orboth  maybeOuterEq and  maybeInnerEq. or(<~>), orboth (~>) and (<~).Due to  /http://hackage.haskell.org/trac/ghc/ticket/5591 you may have to use  and/or  to define some of these. .uncurry (liftA2 assembleEq) (a <~> b) = a ~~ b .uncurry (liftA2 assembleEq) (a <~> b) = a ~~ b$Unpack equality evidence and use it.7This function compiles with GHC 6.10, but doesn't work. Reflexivity  Transitivity!Symmetry"Type constructors are injective#+Use equality evidence to cast between types$+Use equality evidence to cast between types%,Unpack partial equality evidence and use it.7This function compiles with GHC 6.10, but doesn't work.&,Unpack partial equality evidence and use it.7This function compiles with GHC 6.10, but doesn't work.!  !"#$%&'()*+,-./  !"#$%&'()*+! / !"#$  %&'()*+.-,    !"#$%&'()*+,-./ Trustworthy !"3=HJKM0 Type constructors are generative3 Reflexivity4 Transitivity5 Transitivity6Symmetry7 Congruence?8 Congruence?9 Type constructors are generative:Type constructors are injective;$Runtime type equality evidence from  Typeable1 D ReflexivityE TransitivityF TransitivityGSymmetryH Congruence?I Congruence?J$Runtime type equality evidence from  Typeable2 #0123456789:;<=>?@ABCDEFGHIJ@  !"#$%&'()*+0123456789:;<=>?@ABCDEFGHIJ#0123456789:;<=>?@ABCDEFGHIJ0123456789:;<=>?@ABCDEFGHIJ Trustworthy !"'+,=HJKM K Synonym for  . Kind-polymorphic, unlike (c).L Congruence?M Congruence?N Type constructors are generativeO$Runtime type equality evidence from  Typeable1 P$Runtime type equality evidence from  Typeable2 Q$Runtime type equality evidence from  Typeable3 R$Runtime type equality evidence from  Typeable4 S$Runtime type equality evidence from  Typeable5 T$Runtime type equality evidence from  Typeable6 U$Runtime type equality evidence from  Typeable7 KLMNOPQRSTUVWXYZ[\]^1  !"#$%&'()*+KLMNOPQRSTUVWXYZ[\]^KLMNOPQRSTUVWXYZ[\]^KLMNOPQRSTUVWXYZ[\]^d        !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKL7M:2=LNOPQR3STUVWXYZ[\][^_[`a[^b[cde type-eq-0.5Type.Eq.HigherType.EqType.Eq.UnsafeType.Eq.Higher.Unsafe Type.Eq.PolyInnerEq1OuterEq1:::~:::Eq2::~::Eq1InnerEqOuterEq:~:EqunsafeCoercion unsafeOuterEq unsafeInnerEqunsafeCoercion1unsafeCoercion2unsafeOuterEq1unsafeInnerEq1 TypeComparemaybeEq~~ maybeOuterEq~> maybeInnerEq<~piecewiseMaybeEq<~>withEqidEq composeEqflipEq argumentEqcast|> withOuterEq withInnerEqouterEqinnerEq assembleEq sameInnerEq dynamicEq$fTypeComparekOuterEq$fTypeComparekInnerEq$fTypeComparek:~:$fCategoryk:~: constructorEq sameOuterEqwithEq1idEq1 composeEq1|.|flipEq1applyEq1|$|constructorEq1 argumentEq1 dynamicEq1 withOuterEq1 withInnerEq1outerEq1innerEq1 assembleEq1 sameOuterEq1 sameInnerEq1withEq2idEq2 composeEq2||.||flipEq2applyEq2||$|| dynamicEq2applyEq dynamicEq3 dynamicEq4 dynamicEq5 dynamicEq6 dynamicEq7fromEq1toEq1fromEq2toEq2 fromOuterEq1 toOuterEq1 fromInnerEq1 toInnerEq1base Unsafe.Coerce unsafeCoerceGHC.BaseFunctorControl.Applicative ApplicativeMonadControl.Category.