úÎ*&C      !"#$%&'()*+,-./0123456789:;<=>?@ABUnsafe)Very unsafe! The same rules apply as for C. Unsafe)Very unsafe! The same rules apply as for C. )Very unsafe! The same rules apply as for C.  TrustworthyEvidence that type a is the same as type b. The D, E, and F instances of Maybe 8 are extremely useful for working with values of type Maybe (a :~: b). MCan be implemented by types storing evidence of type equalities, i.e. GADTs. A return value of NothingY can mean any of definite inequality, impossible arguments, or insufficient information. Minimal complete definition: maybeEq or (~~), plus either:  piecewiseMaybeEq, or  both  maybeOuterEq and  maybeInnerEq. or  (<~>), or  both (~>) and (<~).  0 uncurry (liftA2 assembleEq) (a <~> b) = a ~~ b  0 uncurry (liftA2 assembleEq) (a <~> b) = a ~~ b Evidence that i; is the argument type of the outermost type constructor of a Evidence that f& is the outermost type constructor of a %Unpack equality evidence and use it. /This function compiles with GHC 6.10, but doesn't work. Beware!  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. /This function compiles with GHC 6.10, but doesn't work. Beware! -Unpack partial equality evidence and use it. /This function compiles with GHC 6.10, but doesn't work. Beware! #$Runtime type equality evidence from Typeable $  !"#GHIJKLM  !"# !"#    !"#GHIJKLM Trustworthy(!Type constructors are generative + Reflexivity , Transitivity - Transitivity . Symmetry / Congruence? 0 Congruence? 1!Type constructors are generative 2 Type constructors are injective 3$Runtime type equality evidence from  Typeable1 < Reflexivity = Transitivity > Transitivity ? Symmetry @ Congruence? A Congruence? B$Runtime type equality evidence from  Typeable2 #$%&'()*+,-./0123456789:;<=>?@AB@  !"#$%&'()*+,-./0123456789:;<=>?@AB#()*+,-./0123&'$%456789:;<=>?@AB$%&'()*+,-./0123456789:;<=>?@ABN      !"#$%&''(()*+,-./0123456789:;<=>?@ABCDEFDGHDIJDGKLMNOPQRS type-eq-0.1.2Type.Eq.HigherType.EqType.Eq.UnsafeType.Eq.Higher.Unsafe:::~:::Eq2::~::Eq1:~:EqunsafeCoercionunsafeCoercion1unsafeCoercion2TypeEqmaybeEq~~ maybeOuterEq~> maybeInnerEq<~piecewiseMaybeEq<~>InnerEqOuterEqwithEqidEq composeEqflipEq argumentEqcast|> withOuterEq withInnerEqouterEqinnerEq assembleEq sameInnerEq dynamicEqInnerEq1OuterEq1 constructorEq sameOuterEqwithEq1idEq1 composeEq1|.|flipEq1applyEq1|$|constructorEq1 argumentEq1 dynamicEq1 withOuterEq1 withInnerEq1outerEq1innerEq1 assembleEq1 sameOuterEq1 sameInnerEq1withEq2idEq2 composeEq2||.||flipEq2applyEq2||$|| dynamicEq2base Unsafe.Coerce unsafeCoerceGHC.BaseFunctorControl.Applicative ApplicativeMonad$fTypeEqOuterEq$fTypeEqInnerEq $fTypeEq:~: $fGroupoid:~:$fSemigroupoid:~: $fCategory:~:$fTypeable2:~: