2=      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                    !"#$%&'()*+,-./0123456789:;< non-portable experimentalsjoerd@w3future.com An instance of  Category (~>) declares the arrow (~>) as a category. ]Whenever objects are required at value level, they are represented by their identity arrows. =Op (~>)& is opposite category of the category (~>). >LThe category with Haskell types as objects and Haskell functions as arrows.  non-portable experimentalsjoerd@w3future.com"AA terminal universal property, a universal morphism from u to x. AAn initial universal property, a universal morphism from x to u. ' is a wrapper to turn instances of the %" class into categorical functors. The dual of a functor $The contravariant functor Hom(--,X)  The covariant functor Hom(X,--) The constant functor. !The composition of two functors. The identity functor on (~>) !eWe need a wrapper here because objects need to be of kind *, and categories are of kind * -> * -> *. ")Functors are arrows in the category Cat. #$:% maps objects. %!Functors map objects and arrows. &% maps arrows. '2The codomain, or target category, of the functor. (0The domain, or source category, of the functor. ?CatC is the category with categories as objects and funtors as arrows. !  !"#$%&'(!"#!('%&$   !  !"##$%&&'( non-portable experimentalsjoerd@w3future.com)*+,-./0123456@!The product category of category c1 and c2. )*+,-./0123456563412/0-.+,)*)**+,,-../00122344566 non-portable experimentalsjoerd@w3future.com789The Yoneda embedding functor. :;kA functor F: Op(C) -> Set is representable if it is naturally isomorphic to the contravariant hom-functor. <=>?@Wrap f h is the functor such that Wrap f h :% g = f :.: g :.: h,  for functors g that compose with f and h. ABPostcompose f c is the functor such that Postcompose f c :% g = f :.: g,  for functors g that compose with f and with domain c. CDPrecompose f d is the functor such that Precompose f d :% g = g :.: f,  for functors g that compose with f and with codomain d. EF*Composition of endofunctors is a functor. GHThe category of endofunctors. I"A newtype wrapper for components, E which can be useful for helper functions dealing with components. JKLA component for an object z is an arrow from F z to G z. M5Natural transformations are built up of components,  one for each object z in the domain category of f and g. NOf :~> g: is a natural transformation from functor f to functor g. P'n ! a'& returns the component for the object a of a natural transformation n. K This can be generalized to any arrow (instead of just identity arrows). Q3Horizontal composition of natural transformations. R2The identity natural transformation of a functor. STAFunctor category D^C. * Objects of D^C are functors from C to D. , Arrows of D^C are natural transformations. 789:;<=>?@ABCDEFGHIJKLMNOPQRSTOLIJKPQRMNHFGDEBC@A?;<=>9:78ST7889::;<=><=>?@AABCCDEEFGGHIJKJKLMNNOPQRST non-portable experimentalsjoerd@w3future.comUThe functor from Pair to (~>), a diagram of 2 objects in (~>). BVCWXYZThe functor from  Discrete n to (~>), a diagram of n objects in (~>). [\DEF]Pair, is the discrete category with two objects. ^Unit+ is the discrete category with one object. _Void is the empty category. `;The arrows in Discrete n, a finite set of identity arrows. abcdGefgHDiscrete (S n)4 is the discrete category with one object more than  Discrete n. I Discrete Z+ is the discrete category with no objects. UVWXYZ[\]^_`abcdefg`badc_^]Z\[UgVWYXefUVWYXXYZ\[[\]^_`baabcdefg non-portable experimentalsjoerd@w3future.comEhijklmThe coproduct of two functors. no!Binary coproduct as a bifunctor. pqLThe coproduct of 2 objects is the colimit of the functor from Pair to (~>). rstuvwThe product of two functors. xyBinary product as a bifunctor. z{HThe product of 2 objects is the limit of the functor from Pair to (~>). |}~5An initial object is the colimit of the functor from 0 to (~>). 3A terminal object is the limit of the functor from 0 to (~>). If every diagram of type j has a colimit in (~>)! there exists a colimit functor. >Applied to a natural transformation it is a generalisation of (+++): l u r =  & g l r An instance of HasColimits j (~>) says that (~>) has all colimits of type j. If every diagram of type j has a limit in (~>) there exists a limit functor. >Applied to a natural transformation it is a generalisation of (***): l  r =  & g l r An instance of HasLimits j (~>) says that (~>) has all limits of type j.  A colimit of f is a universal morphism from f to the diagonal functor. Colimits in a category (~>) by means of a diagram of type j, which is a functor from j to (~>).  A limit of f6 is a universal morphism from the diagonal functor to f. Limits in a category (~>) by means of a diagram of type j, which is a functor from j to (~>). WA co-cone from F to N is a natural transformation from F to the constant functor to N. TA cone from N to F is a natural transformation from the constant functor to N to F. :The diagonal functor with the same domain and codomain as f. 7The diagonal functor from (index-) category J to (~>).  The vertex (or apex) of a cone. #The vertex (or apex) of a co-cone. limitUniversal` is a helper function to create the universal property from the limit and the limit factorizer. A limit of the diagram f is a cone of f. For any other cone of f with vertex n% there exists a unique morphism from n to the limit of f. colimitUniversald is a helper function to create the universal property from the colimit and the colimit factorizer. A colimit of the diagram f is a co-cone of f. For any other co-cone of f with vertex n4 there exists a unique morphism from the colimit of f to n. JaThe constant functor to the initial object is itself the initial object in its functor category. K,The empty category is the initial object in Cat. L,Any empty data type is an initial object in Hask. McThe constant functor to the terminal object is itself the terminal object in its functor category. NUnit is the terminal category. O() is the terminal object in Hask. ?hijklmnopqrstuvwxyz{|}~?{|}~yzwxvqrstuopmnjklhi?hiijklklmnnoppqrsturstuvwxxyzz{|}~|}~ non-portable experimentalsjoerd@w3future.com non-portable experimentalsjoerd@w3future.comPQRS<The limit functor is right adjoint to the diagonal functor. =The colimit functor is left adjoint to the diagonal functor. TCThe category with categories as objects and adjunctions as arrows.   non-portable experimentalsjoerd@w3future.com  non-portable experimentalsjoerd@w3future.com)The arrows are the values of the monoid. U>The category of all monoids, with monoid morphisms as arrows. V(A monoid as a category with one object.   non-portable experimentalsjoerd@w3future.com A natural transformation Nat c d! is isomorphic to a functor from c :**: 2 to d. W5True is the terminal object in the Boolean category. X5False is the initial object in the Boolean category. YBooleanR is the category with true and false as objects, and an arrow from false to true.   non-portable experimentalsjoerd@w3future.comThe arrows of omega, there's an arrow from a to b iff a <= b.      non-portable experimentalsjoerd@w3future.com                   non-portable experimentalsjoerd@w3future.comZThe category for defining the natural numbers and primitive recursion can be described as   Dialg(F,G), with F(A)=<1,A> and G(A)=<A,A>. : provides the initial F-algebra for endofunctors in Hask. RA anamorphism of an F-coalgebra is the arrow from it to the terminal F-coalgebra. NA catamorphism of an F-algebra is the arrow to it from the initial F-algebra. QThe terminal F-coalgebra is the terminal object in the category of F-coalgebras. KThe initial F-algebra is the initial object in the category of F-algebras.  !".Arrows of Dialg(F,G) are (F,G)-homomorphisms. #$,Objects of Dialg(F,G) are (F,G)-dialgebras. %&'((Catamorphisms for endofunctors in Hask. )'Anamorphisms for endofunctors in Hask. * !"#$%&'()*$%"#&'! ()* !"##$%%&'()* non-portable experimentalsjoerd@w3future.com +3The natural numbers are the initial object for the . category. ,-./01234@Primitive recursion is the factorizer from the natural numbers. +,-./01234 01./23+-,4 +-,,-.//011234 non-portable experimentalsjoerd@w3future.com56789:;<56789:;<;<9:876556789::;<<Z  !!"#$%&''(())*+,-./012233445566778899::;<=>?@@AABBCCDEEFGHHIJKLMNOPQRSTUVWXYZ[\[\]^_``aabccddefghijkkllmnopqrstuvwxyz{||}~X                                  [  \ [ \       [\[\          !"data-category-0.3.0.2 Data.CategoryData.Category.FunctorData.Category.Product#Data.Category.NaturalTransformationData.Category.DiscreteData.Category.LimitData.Category.MonoidalData.Category.AdjunctionData.Category.CartesianClosedData.Category.MonoidData.Category.BooleanData.Category.OmegaData.Category.KleisliData.Category.DialgData.Category.PeanoData.Category.CommaOpunOpCategorysrctgt.ObjTerminalUniversaltuObjectterminalMorphismterminalFactorizerInitialUniversaliuObjectinitialMorphisminitialFactorizerEndoHaskOpposite:-*:Hom_X:*-:HomX_ConstFConst:.:IdCatWCatCatA:%Functor%CodDomTuple2Tuple1DiagProd:***:Proj2Proj1:**:YonedaYonedaEmbedding RepresentableRepresentingObject represent unrepresent PresheavesWrap Postcompose PrecomposeFunctorComposeEndoComunCom ComponentNat:~>!onatId fromYonedatoYoneda PairDiagram discreteNatComList::::ComNilDiscreteDiagram:::NilPairUnitVoidDiscreteSZvoidNatpairNat arrowPairExistsForAllunForAll:+:CoproductFunctorHasBinaryCoproductsinj1inj2|||+++BinaryCoproduct:*:ProductFunctorHasBinaryProductsproj1proj2&&&*** BinaryProductZeroHasInitialObject InitialObject initialObject initializeHasTerminalObjectTerminalObjectterminalObject terminateColimitFunctor HasColimits colimitUniv LimitFunctor HasLimits limitUnivColimitUniversalColimit ColimitFamLimitUniversalLimitLimitFamCoconeConeDiagFDiag coneVertex coconeVertexlimitUniversallimitlimitFactorizercolimitUniversalcolimitcolimitFactorizer endoHaskLimitendoHaskColimitComonadMonadComonoidObjectcounit comultiply MonoidObjectunitmultiply TensorProduct leftUnitor leftUnitorInv rightUnitorrightUnitorInv associator associatorInvHasUnit unitObjectmkMonad preludeMonad monadFunctor mkComonadAdjArrow Adjunction leftAdjoint rightAdjoint mkAdjunction leftAdjunct rightAdjunctadjunctionInitialPropadjunctionTerminalPropinitialPropAdjunctionterminalPropAdjunctionlimitAdj colimitAdjadjunctionMonadadjunctionComonadcontAdjContextStateExponentialWith ProductWithPShExponentialCatTupleCatApply ExpFunctorCartesianClosedapplytuple^^^ ExponentialcurryAdjcurryuncurrystateMonadReturnstateMonadJoincontextComonadExtractcontextComonadDuplicate FreeMonoid ForgetMonoidMonMonoidMorphismMonoidAunMonoidMorphism freeMonoidAdjfoldMaplistMonadReturn listMonadJoinlistComonadExtractlistComonadDuplicate NatAsFunctorBooleanTruF2TFlsOmegaZ2S KleisliAdjG KleisliAdjFKleisli kleisliId kleisliAdjNatNumNatFFixFInFoutFAnaCataTerminalFAlgebraInitialFAlgebra CoalgebraCoalgAlgebraAlgDialgDialgA DialgebradialgId dialgebracataHaskanaHaskprimRecPeanoPeanoAPeanoOpeanoIdpeanoO ObjectsOver ObjectsUnder ObjectsFOver ObjectsFUnder:/\:CommaACommaO $fCategoryOp$fCategory(->) $fCategoryCat$fCategory:**: $fCategoryNat DiscreteNat shiftComListNext PredDiscretemagicZ$fCategoryDiscrete$fCategoryDiscrete0$fHasInitialObjectNat$fHasInitialObjectCat$fHasInitialObject(->)$fHasTerminalObjectNat$fHasTerminalObjectCat$fHasTerminalObject(->)Cont2Cont1$fCategoryAdjArrow $fCategoryMon$fCategoryMonoidA$fHasTerminalObjectBoolean$fHasInitialObjectBoolean$fCategoryBoolean