!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijk l m n o p q r s t u v w x y z { | } ~        !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Copyright (C) 2015 Kyle CarterBSD3"Kyle Carter <kylcarte@indiana.edu> experimental RankNTypesSafe'>KLCopyright (C) 2015 Kyle CarterBSD3"Kyle Carter <kylcarte@indiana.edu> experimental RankNTypesNone!"&'(*3579>IKLNUZ The empty .   Copyright (C) 2015 Kyle CarterBSD3"Kyle Carter <kylcarte@indiana.edu> experimental RankNTypesNone!"&'(*3579>IKLNUZ Map a list of (fs :: [k -> l]) over a single (a :: k), giving a list  (bs :: [l]). Map an  (f :: k -> l) over a type-level list  (as :: [k]), giving a list  (bs :: [l]). Takes a type-level list of s to a single , where ListC cs holds iff all elements of cs hold.Type-level list snoc.Appends two type-level lists.Type-level singleton list.        Copyright (C) 2015 Kyle CarterBSD3"Kyle Carter <kylcarte@indiana.edu> experimental RankNTypesNone!"&'(*3579>IKLNUZ /Convenient aliases for low-value Peano numbers. !"#$%&'() !"#$%&'()'()&%$#"!  !"#$%&'()!"#Copyright (C) 2015 Kyle CarterBSD3"Kyle Carter <kylcarte@indiana.edu> experimental RankNTypesNone!"&'(*3579>IKLNUZ.Map over a type-level Maybe./Take a Maybe Constraint to a  Constraint.*+,-./*+,-.//.-,+**+,-./+,-.Copyright (C) 2015 Kyle CarterBSD3"Kyle Carter <kylcarte@indiana.edu> experimental RankNTypesSafe!"&'(*3579>IKLNUZ;A type-level pair is a Monoid over its pairwise components.0123450123455432100123450125Copyright (C) 2015 Kyle CarterBSD3"Kyle Carter <kylcarte@indiana.edu> experimental RankNTypesNone!"&'(*3579>IKLNUZ6Each instance of 6D provides a canonical construction of a type at a particular index..Useful for working with singleton-esque GADTs.678967867896789Copyright (C) 2015 Kyle CarterBSD3"Kyle Carter <kylcarte@indiana.edu> experimental RankNTypesNone!"&'(*34579>IKLNUZ M$A general eliminator for entailment.Given a term of type t with an instance  Witness p q t and a term of type r that depends on  q#, we can reduce the Constraint to p.If p is C, i.e. the empty  (), then a Witness t) can completely discharge the Constraint q.PReified evidence of  entailment.Given a term of p :- q, the Constraint q holds if p holds.Entailment of  s form a : id :: p :- p((.) :: (q :- r) -> (p :-> q) -> (p :- r)U A reified .W Convert a M# to a canonical reified entailment.X Convert a M to a canonical reified .YConstraint chaining under Maybe.fIf the constraint c> holds, there is a canonical construction for a term of type U c, viz. the constructor Wit.gA type equality a  b is a Witness that (a ~ b).hAn entailment p :- q is a Witness of q, given p.1:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij7:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a1UVSTPQRjMNOWXihgfYZ[JKLHI\DEFG]^e=>?@ABC;<dcb_:`a:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij :@OPY]^_`a Copyright (C) 2015 Kyle CarterBSD3"Kyle Carter <kylcarte@indiana.edu> experimental RankNTypesNone!"&'(*3579>IKLNUZklmnopqklmnoklmnoqpklmnopq Copyright (C) 2015 Kyle CarterBSD3"Kyle Carter <kylcarte@indiana.edu> experimental RankNTypesSafe!"&'(*3579>IKLNUZATake a natural transformation to a lifted natural transformation.rstuvwxyz{|}~rstuvwxyz{|}~~|}z{xyvwtursrstuvwxyz{|}~ Copyright (C) 2015 Kyle CarterBSD3"Kyle Carter <kylcarte@indiana.edu> experimental RankNTypesNone!"&'(*3579>IKLNUZ Copyright (C) 2015 Kyle CarterBSD3"Kyle Carter <kylcarte@indiana.edu> experimental RankNTypesNone!"&'(*3579>IKLNUZ Copyright (C) 2015 Kyle CarterBSD3"Kyle Carter <kylcarte@indiana.edu> experimental RankNTypesNone!"&'(*3579>IKLNUZ$ indexes the head of the list, and # indexes into the tail of the list.  Copyright (C) 2015 Kyle CarterBSD3"Kyle Carter <kylcarte@indiana.edu> experimental RankNTypesNone!"&'(*3579>IKLNUZEliminator for  f.(We can take a natural transformation of (forall x. f x -> g x)! to a natural transformation of  (forall mx.  f mx ->  g mx).  Copyright (C) 2015 Kyle CarterBSD3"Kyle Carter <kylcarte@indiana.edu> experimental RankNTypesNone!"&'(*3579>IKLNUZCopyright (C) 2015 Kyle CarterBSD3"Kyle Carter <kylcarte@indiana.edu> experimental RankNTypesNone!"&'(*3579>IKLNUZC      !C      .      Copyright (C) 2015 Kyle CarterBSD3"Kyle Carter <kylcarte@indiana.edu> experimental RankNTypesNone!"&'(*3579>IKLNUZ#(A data type for natural transformations.,An eliminator for a ) type.hNB: the result type of the eliminating function may not refer to the universally quantified type index a.This function deserves more documentation. It is a powerful basis for working with correct-by-construction data. It serves as an explicit delimiter in a program of where the type index may be used and depended on, and where it may not.!"#$%&'()*+,-.!"#$%&'()*+,-.)*,-.(+%&'#$!" !"#$%&'()*+,-.!#Copyright (C) 2015 Kyle CarterBSD3"Kyle Carter <kylcarte@indiana.edu> experimental RankNTypesNone!"&'(*3579>IKLNUZ/0123456789:;<=>?@ABCDEFGH/0123456789:;<=>?/0123456789:;<=>?HGFEDCBA@/0123456789:;<=>?@ABCDEFGH126Copyright (C) 2015 Kyle CarterBSD3"Kyle Carter <kylcarte@indiana.edu> experimental RankNTypesNone!"&'(*3579>IKLNUZP A proof that (: is also a right identity for the addition of type-level Is.cA Nat n is a M- that there is a canonical construction for Nat n.dIf n is a canonical construction of Nat n, K n" is the canonical construction of  Nat (S n).eJ$ is the canonical construction of a I Z.IJKLMNOPQRSTUVWXYZ[\]^_`abcdeIJKLMNOPQRSTUVWXYZ[\]^_`IJKedcbaLMNOPQRSTUVWXYZ[\]^_`IJKLMNOPQRSTUVWXYZ[\]^_`abcdeRSTCopyright (C) 2015 Kyle CarterBSD3"Kyle Carter <kylcarte@indiana.edu> experimental RankNTypesNone!"&'(*34579>IKLNUZk8Gives the list of all members of the finite set of size n.mThere are no members of Fin Z.oCMap a finite set to a lower finite set without one of its members.pTake a h to an existentially quantified I.qA Fin n is a M that n >= 1. That is, $ n is well defined.fghijklmnopqrs fghijklmnophijklmnofgsrpq fghijklmnopqrsCopyright (C) 2015 Kyle CarterBSD3"Kyle Carter <kylcarte@indiana.edu> experimental RankNTypesNone!"&'(*134579>IKLNUZ7tuvwxyz{|}~/tuvwxyz{|}~7yz{x|}~uvwt3tuvwxyz{|}~{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDE$%&F$%&GHIJKLMNOPQRSTUVWXXYZ[\]^_`abcdeffgghijklmnopNqrstuvwxyz { | } ~                              !"#$%&'()**+,--,./01/.2345+6789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrsstuvwxyz{45|}~typec_2TU2bsGpqGs5yx2cf8Wxc2Type.Family.ListType.Family.ConstraintType.Family.NatType.Family.MonoidType.Family.MaybeType.Family.PairType.Class.KnownType.Class.WitnessData.Type.LengthType.Class.HFunctorData.Type.ConjunctionData.Type.DisjunctionData.Type.IndexData.Type.Option Data.Type.SumData.Type.CombinatorData.Type.QuantifierData.Type.Product Data.Type.Nat Data.Type.FinData.Type.Vectorghc-prim GHC.Classes==GHC.Prim ConstraintbaseData.Type.Equality<>MemptyIffIffCØC $fIffFalsetf $fIffTruetf<*><&><$>ListCLast'Init'Reverse>:++Only:<ØN10N9N8N7N6N5N4N3N2N1N0^*+PredIotaNatEqNZSFromJust<|>MaybeCSndFst#KnownKnownCknown $fKnownk:~:b<-> SymmetricsymmMonoidalTensorUnit.*.assocunitLunitRBijfwdbwd DecEqualitydecideEqualityDecProvenRefutedWitnessWitnessC\\:-SubgetSubWit1Witentailed witnessed/?qed impossibledecCase$-><-$***$fMonoidalkBij$fMonoidal*(->)$fSymmetrickBij$fCategorykBij$fKnownConstraintWitc$fWitness()~:~: $fWitnesspq:-$fWitness()cWit$fCategoryConstraint:-LengthLZLSlOddlEven$fKnown[]Length:$fKnown[]Length[] HBifunctorbimap'HIxTraversable itraverse' HTraversable traverse' HIxFoldable ifoldMap' HFoldablefoldMap' HIxFunctorimap'HFunctormap':*::&:fanFstfanSnd uncurryFancurryFanparFstparSnd uncurryParcurryPar_fst_snd$fWitness(,)(,):*:$fDecEquality(,):*:$fHBifunctorkk(,):*:$fHTraversablek(,):*:$fHFoldablek(,):*:$fHFunctork(,):*:$fKnown(,):*:p$fWitness(,)(,):&:$fHBifunctorkkk:&:$fHTraversablekk:&:$fHFoldablekk:&:$fHFunctorkk:&: $fKnownk:&:a$fDecEqualityk:&::|:L'R':+:LR>+<>|<$fWitnesspq:|:$fWitnesspq:|:0$fHBifunctorkkEither:|:$fHTraversablekEither:|:$fHFoldablekEither:|:$fHFunctorkEither:|:$fKnownEither:|:Right$fKnownEither:|:Left$fWitnesspq:+:$fHBifunctorkkk:+:$fHTraversablekk:+:$fHFoldablekk:+:$fHFunctorkk:+:Elem elemIndex∈IndexIZIS$fKnownkIndexa$fKnownkIndexa0 $fElemk:a $fElemk:a0OptionNothing_Just_option$fWitnesspqOption$fKnownMaybeOptionJust$fKnownMaybeOptionNothing$fHTraversablekMaybeOption$fHFoldablekMaybeOption$fHFunctorkMaybeOptionSumFInLFInRFSumInLInRdecomp injectSuminjprjindexdecompFinjFprjF injectSumFindexF $fFunctorSumF$fWitnesspqSum$fWitnesspqSum0$fHIxTraversable[]kIndexSum$fHTraversablek[]Sum$fHIxFoldable[]kIndexSum$fHFoldablek[]Sum$fHIxFunctor[]kIndexSum$fHFunctork[]SumFlipgetFlipJoingetJoinCgetCCTgetCTSSgetSSRRgetRRLLgetLLIgetIITgetIT:..:Comp2:.:CompgetCompflipped$fWitnesspqFlip $fKnownkFlipa$fWitnesspqJoin $fKnownkJoina$fNumC $fWitnesspqC$fNumCT $fWitnesspqCT$fHTraversablekkCT$fHFoldablekkCT$fHFunctorkkCT $fWitnesspqSS $fWitnesspqRR$fHTraversablekkRR$fHFoldablekkRR$fHFunctorkkRR $fWitnesspqLL$fHTraversablek(->)LL$fHFoldablek(->)LL$fHFunctork(->)LL$fNumI $fWitnesspqI$fTraversableI $fFoldableI$fMonadI$fApplicativeI $fFunctorI$fNumIT $fWitnesspqIT$fHTraversablekkIT$fHFoldablekkIT$fHFunctorkkIT$fWitnesspq:..:$fWitnesspq:.::-->NT2:->NTAllinstAllSome2SomesomewithSomeonSomeProd:>onlyhead'tail'reverse'init'last'append'onHead'onTail'uncurry'curry'$fWitness(,)(,)Prod$fWitness()()Prod$fKnown[]Prod:$fKnown[]Prod[]$fHTraversablek[]Prod$fHIxFoldable[]kIndexProd$fHFoldablek[]Prod$fHIxFunctor[]kIndexProd$fHFunctork[]ProdNatZ_S__Z_S_s_ZneSaddZaddS.+.*.^natn0n1n2n3n4n5n6n7n8n9n10$fDecEqualityNNat$fTestEqualityNNat$fWitness()KnownNat $fKnownNNatS $fKnownNNatZ<=weakenNFinFZFSfinsfinfinZweakenwithoutfinNat$fWitness()~Fin$f<=xS$f<=xxMatrixM getMatrixVVTØV:*:+.++vreponTailvDelimapifoldMap itraversevmapvapvfoldr vfoldMap'vfoldMapwithVTwithVfindVfindVTvgen_vgenmgen_mgenonMatrixdiagonal vtranspose transposem0m1m2m3m4ppVecppMatrix ppMatrix'mzipWithzipLinescompose$fNumM$fNumVT$fWitness()KnownVT$fTraversableVT $fFoldableVT $fMonadVT$fApplicativeVT $fFunctorVT TFCo:R:<>[]abTFCo:R:Mempty[] TFCo:R:==NxyTFCo:R:<>MaybeabTFCo:R:MemptyMaybeTFCo:R:Mempty(,)TFCo:R:<>(,)(,)(,)Control.CategoryCategory:~: Data.VoidvacuousabsurdVoidouterinnerapply gcastWithcastWithtranssymRefl testEquality TestEquality