U8=      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None   None Main Example Main.hs: {-f LANGUAGE DataKinds, FlexibleInstances, MultiParamTypeClasses, FlexibleContexts, UndecidableInstances -}  module Main (main) where  import Prelude.Type  instance Compare ' [I 1, I 3] ' [I 1, I 2] a  => Main a $ ghc-stage2 Main.hs  $ ./Main  GT Convert a type to a value  Proxy Type #       None0Two bit sum of three bits  Add3 a b c ~ ' (sum, carry) R The Kind * kGet kind of a type nIf \ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmn~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmn\nmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"! \ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnNoneoMatch  Used by Case to match patterns. Match +a ?b -c I Given a type a, match it with a pattern b, unifying the type variables. 1 If it matches, c is True, otherwise c is False. Fvalue (T :: Match (Just True) (Just x) p => T '(x, p)) :: (Bool, Bool) (True, True)CMatch is in a seperate module because I use IncoherentInstances to  match type variables. /o !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFoo/o !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFNonerTypeEq  The Kind * Get kind of a type Case  If Then Else Lambda pqrstuvwxyz{|}~GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFG     opqrstuvwxyz{|}~~}|{zyxwvutsrqppqrstuvwxyz{|}~GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGH      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvw!#$%&x*-./0y123489z{@B|}CD~FGHIKLMNOPQRSTUVWXY\]^_`bcdefghijklmnopqrs      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     type-prelude-0.1Prelude.Type.IntegerPrelude.Type.ValuePrelude.Type.FamiliesPrelude.Type.Match Prelude.Type IntegerCons IntegerTail IntegerHeadIIntegerZerosOnesZeroOneMain'mainMain''MainValuevalueProxyTproxyQuotRemQuotRem' QuotRem'_4 QuotRem'_3 QuotRem'_2QuotRem Complement BitwiseAnd_2.&.Xor_2XorAsKindOfERRORError UndefinedCompare0Gcd_2GcdGcd_3Gcd_1OddEvenSubtractAbsSignum*NegateMinusAdd3AddWithCarry_3AddWithCarry_2 AddWithCarry+ IntegerEnd2 IntegerEnd IntegerEqualDigitIsZeroShowsInteger_2NotElemElem_1ElemOrAnd Replicate_1 ReplicateConcat++DropAt_1!!LengthNullInitLastTailHead ShowsTailFlipId$ComposeStarKindSndFstCombineOrdering FromOrdering&&||NotMaxBoundMinBound EnumFromTo_1 EnumFromToPredSuccFromEnumToEnumMinMax>>=<=<Compare/===KindShowsShowIfMatchTypeEq''TypeEq'TypeEqGcd'Signum' ShowsIntegerMaximumAllAnyBreakSpan DropWhile TakeWhileSplitAtTakeFoldR1FoldL1ScanR1ScanL1 ScanFold1ScanRScanL ConcatMapFoldLFoldRMapUntilConstConst4Const3Const2Const1Flip4Flip3Flip2Flip1Apply4Apply3Apply2Apply1PartialPartial4Partial3Partial2Partial1OCompose4Compose3Compose2Compose1 EnumFromToByEnumFromThenTo Alternative Otherwise-->Case'CaseLambdaLambda4Lambda3Lambda2Lambda1$fValueIntegerZeroInteger$fValueIntegerOneInteger$fValueIntegerOnesInteger$fValueIntegerZerosInteger $fValue[]:[] $fValue[][][]$fValue*tTypeRep$fValueSymbolt[]$fValueNattInteger$fValue(,,,)(,,,)(,,,)$fValue(,,)(,,)(,,)$fValue(,)(,)(,)$fValueEitherRightEither$fValueEitherLeftEither$fValueOrderingGTOrdering$fValueOrderingEQOrdering$fValueOrderingLTOrdering$fValueBoolFalseBool$fValueBoolTrueBool$fValueMaybeNothingMaybe$fValueMaybeJustMaybe $fValue()()() $fMain'kIOa$fShowT $fValue(->)ctghc-prim GHC.TypesBoolOrderingbase Data.EitherEither GHC.TypeLitsNatSymbolFalseTrueLeftRightLTEQGT Data.MaybeNothingJustMaybe$fMatchIntegerZerozero_jp$fMatchIntegerOneone_jp$fMatchIntegerZeroszerostrue$fMatchIntegerOnesonestrue$fMatchIntegerZeroZerosFalse$fMatchIntegerZeroOneFalse$fMatchIntegerZeroOnesFalse$fMatchIntegerOneZeroFalse$fMatchIntegerOneZerosFalse$fMatchIntegerOneOnesFalse$fMatchIntegerZerosZeroFalse$fMatchIntegerZerosOneFalse$fMatchIntegerZerosOnesFalse$fMatchIntegerOnesZerosFalse$fMatchIntegerOnesZeroFalse$fMatchIntegerOnesOneFalse$fMatch[]:consp$fMatch[][]niltrue$fMatch[]:[]False$fMatch[][]:False$fMatch(,,,)(,,,)e_f_g_hv$fMatch(,,)(,,)e_f_gt$fMatch(,)(,)e_fr$fMatchEitherRightright_bp$fMatchEitherLeftleft_bp$fMatchEitherRightLeftFalse$fMatchEitherLeftRightFalse$fMatchOrderingGTgtmatch$fMatchOrderingGTLTFalse$fMatchOrderingGTEQFalse$fMatchOrderingEQeqmatch$fMatchOrderingEQGTFalse$fMatchOrderingEQLTFalse$fMatchOrderingLTltmatch$fMatchOrderingLTGTFalse$fMatchOrderingLTEQFalse$fMatchBoolFalsefalsematch$fMatchBoolFalseTrueFalse$fMatchBoolTruetruematch$fMatchBoolTrueFalseFalse$fMatchMaybeJustjust_bp$fMatchMaybeJustNothingfalse$fMatchMaybeNothingnothingtrue$fMatchMaybeNothingJustFalse$fMatch()abTrue $fMatchkabp$fTypeEq''k()xyFalse$fTypeEq'kqxyb$fTypeEq'k()xxb $fTypeEqkxyb$fQuotIntegerabq$fRemIntegerabr$fQuotRem'abqr$fQuotRemIntegerab(,)$fQuotRemIntegeraZerosb$fComplementIntegerab$fComplementIntegerOnesZeros$fComplementIntegerZerosOnes$fComplementBoolFalseTrue$fComplementBoolTrueFalse$f.&.IntegerZerobe$f.&.IntegerOnebe$f.&.IntegerOnesaa$f.&.IntegerZerosaZeros $f.&.kabc$fXorIntegerabe$fXorIntegerOnesab$fXorIntegerZerosaa $fXorBoolabc $fAsKindOfkab $fErrorka$fCompareIntegerabp $fGcd'xyz $fGcd'xZerosx$fGcdIntegerxyz$fGcdIntegerZerosZerosc$fOddIntegerZeroFalse$fOddIntegerOneTrue$fOddIntegerZerosFalse$fOddIntegerOnesTrue$fEvenIntegerip$fSubtractkabdif$fAbsIntegerab$fSignum'IntegerOnes$fSignum'IntegerZeros$fSignum'IntegerOnesOnes$fSignum'IntegerZerosOne $fSignumkis$fSignumIntegerZeros$fSignumIntegerZerosZeros$f*IntegerOneaprod$f*IntegerZeroaprod$f*IntegerOneaa$f*IntegerOnesaprod$f*IntegerZerosaZeros$fNegateIntegerac$fMinusIntegerabdif$fAddWithCarrycarryabsum $fAddWithCarryTrueZerosOnesZeros$fAddWithCarryTrueOnesaa $fAddWithCarryFalseOnesZerosOnes$fAddWithCarryFalseZerosaa$f+Integerabsum$fKindIntegeraInteger$fToEnumIntegerii$fFromEnumIntegerii$f==Integerijp$f==IntegerZeroZerop$f==IntegerOneOnep$f==IntegerZerosZerosTrue$f==IntegerOnesOnesTrue$fShowsIntegerixy$fShowsIntegerZerosxx$fShowsIntegerixy0$fShowsIntegerZerosx: $fElemka:p$fElemka[]False $fBreakkf:y$fBreakkf[](,) $fSpankfa(,)$fDropWhilekf:ys$fDropWhilekf[][]$fTakeWhilekf:ys$fTakeWhilekf[][]$fSplitAtkia(,) $fTakeki:b $fTakeki[][]$fReplicatekial$fReplicatekZerosa[]$fScanFold1kkkcx:z $fScanRkkfq::$fScanRkkfq[]: $fScanLkkfx::$fScanLkkfx[]:$fConcatMapkkflj$f++k:b: $f++k[]bb$fDropkZeroxszs $fDropkOne:zs $fDropki[][] $fDropkOnesab$fDropkZerosab $f!!k:Zeroy $f!!k:Oney $f!!k:Zerosy $f!!k[]nx $fLengthk:i$fLengthk[]Zeros $fNullk:False $fNullk[]True $fInitk:: $fInitk:[] $fInitk[]a $fLastk:a $fLastk:b $fLastk[]a $fTailk:xs $fTailk[]a $fHeadk:x $fHeadk[]a$fFoldLkkfaccum:ret$fFoldLkkfaccum[]accum$fFoldRkkfnil:ret$fFoldRkkfnil[]ret $fMapkkf:: $fMapkkf[][] $f==[]::o$f==[][][]True $fKind[][][] $fKind[]:[]$fCompare[]::r$fCompare[]:[]GT$fCompare[][]:LT$fCompare[][][]EQ$fShowsTailk:x:$fShowsTailk[]x: $fShows[]:x: $fShows[][]x: $fUntilkpfxy$fConst4kkkkkabcdea$fConst3kkkkabcda$fConst2kkkabca $fConst1kkaba$fFlip4kkkkkfxymno$fFlip3kkkkfxymn$fFlip2kkkfxym $fFlip1kkfxy$fIdkaa$fApply4kkkkfxegh$fApply3kkkfxeg $fApply2kkfxe $fApply1kfx$fPartial4kkkkkfxyzaf$fPartial3kkkkfxyzf$fPartial2kkkfxyf$fPartial1kkfxf$fCompose4kkkkkkfgxzabc$fCompose3kkkkkfgxzab$fCompose2kkkkfgxza$fCompose1kkkfgxz$f==*abp$fKind*aStarKind $f==Symbolabp $f==Natabp$fKindSymbolaSymbol $fKindNataNat$fShowsSymbolax: $fSndkk(,)b $fFstkk(,)a$f==(,,,)(,,,)(,,,)o$f==(,,)(,,)(,,)o$f==(,)(,)(,)o$fKind(,,,)(,,,)(,,,)$fKind(,,)(,,)(,,)$fKind(,)(,)(,)$fCompare(,,,)(,,,)(,,,)r$fCompare(,,)(,,)(,,)r$fCompare(,)(,)(,)r$fShows(,,,)(,,,)v:$fShows(,,)(,,)w:$fShows(,)(,)x:$f==EitherRightLeftFalse$f==EitherLeftRightFalse$f==EitherRightRightp$f==EitherLeftLeftp$fKindEitherRightEither$fKindEitherLeftEither$fCompareEitherLeftLefto$fCompareEitherRightRighto$fCompareEitherRightLeftGT$fCompareEitherLeftRightLT$fShowsEitherRightx:$fShowsEitherLeftx:$f==Orderingabp$fKindOrderingaOrdering$fCompareOrderingabo $fToEnumkio$fFromEnumOrderingoi$fShowsOrderingoxy$f&&abp$f&&TrueTrueTrue$f||abp$f||FalseFalseFalse$fNotFalseTrue$fNotTrueFalse $f==Boolabp$fKindBoolaBool$fCompareBoolabo$fToEnumBoolOneTrue$fToEnumBoolZerosFalse$fFromEnumBoolTrueOne$fFromEnumBoolFalseZeros$fShowsBoolFalsex:$fShowsBoolTruex:$f==MaybeJustNothingFalse$f==MaybeNothingJustFalse$f==MaybeJustJustp$f==MaybeNothingNothingTrue$fKindMaybeNothingMaybe$fKindMaybeJustMaybe$fCompareMaybeJustJusto$fCompareMaybeJustNothingGT$fCompareMaybeNothingJustLT$fCompareMaybeNothingNothingEQ$fToEnumMaybeje$fToEnumMaybeZerosNothing$fFromEnumMaybeJustj$fFromEnumMaybeNothingZeros$fShowsMaybeJustx:$fShowsMaybeNothingx:$fCompare()()()EQ $f==()abTrue $fKind()()()$fFromEnum()()Zeros$fToEnum()Zeros() $fShows()()x: $fMaxBoundka $fMinBoundka$fEnumFromToBykabcl$fEnumFromThenToIntegeracbl$fEnumFromThenTokacbl$fEnumFromToIntegerabl$fEnumFromTokabl $fPredkab $fSucckab $fMinkabmin $fMaxkabmax$f>kabp$f>=kabp$f<=kabp$f