úÎJÔEO      !"#$%&'()*+,-./01234567 8 9 : ; < = > ? @ A B C D E F G H I J K L M N portable experimentalEdward Kmett <ekmett@gmail.com> Safe-InferedCCategory of discrete objects. The only arrows are identity arrows. WDiscrete a b acts as a proof that a = b, lift that proof into something of kind * -> * 5Lower the proof that a ~ b to an arbitrary category. OOBnon-portable (either class-associated types or MPTCs with fundeps) experimentalEdward Kmett <ekmett@gmail.com> Safe-InferedThe  Category (~>)$ has an initial (coterminal) object  Initial (~>) such that for all objects  a in (~>)&, there exists a unique morphism from  Initial (~>)  to a. The  Category (~>) has a terminal object  Terminal (~>) such that for all objects a in (~>), % there exists a unique morphism from a to  Terminal (~>).     portable experimentalEdward Kmett <ekmett@gmail.com> Safe-Infered PQR    PQR&non-portable (functional-dependencies) experimentalEdward Kmett <ekmett@gmail.com> Safe-InferedMinimal definition: bimap STUVWXY STUVWXYportable experimentalEdward Kmett <ekmett@gmail.com> Safe-Infered<A category with an associative bifunctor satisfying Mac Lane'%s pentagonal coherence identity law: M bimap id associate . associate . bimap associate id = associate . associate \ bimap disassociate id . disassociate . bimap id disassociate = disassociate . disassociate Z[Z[%non-portable (class-associated types) experimentalEdward Kmett <ekmett@gmail.com> Safe-Infered/Denotes that we have some reasonable notion of Identity for a particular  Bifunctor in this Category. This " notion is currently used by both  and  Comonoidal A monoidal category.  and * are traditionally denoted lambda and rho  the triangle identities hold: $ first idr = second idl . associate $ second idl = first idr . associate ' first idr = disassociate . second idl ' second idl = disassociate . first idr  idr . coidr = id  idl . coidl = id  coidl . idl = id  coidr . idr = id \]\]portable experimentalEdward Kmett <ekmett@gmail.com> Safe-InferedIf we have a symmetric (co)Monoidal' category, you get the additional law:  swap . swap = id rA braided (co)(monoidal or associative) category can commute the arguments of its bi-endofunctor. Obeys the laws:  H associate . braid . associate = second braid . associate . first braid Q disassociate . braid . disassociate = first braid . disassociate . second braid CIf the category is Monoidal the following laws should be satisfied   idr . braid = idl  idl . braid = idr EIf the category is Comonoidal the following laws should be satisfied  braid . coidr = coidl  braid . coidl = coidr  !"^_`a !" !" !"^_`a%non-portable (class-associated types) experimentalEdward Kmett <ekmett@gmail.com> Safe-Infered )Minimum definition:  fst, snd, diag  fst, snd, (&&&) /free construction of  for the product   Product k if (&&&) is known 0free construction of   for the product   Product k 1free construction of  Associative for the product   Product k 2free construction of Disassociative for the product   Product k 3free construction of  for the coproduct  Sum k if (|||) is known 4free construction of   for the coproduct  Sum k 5free construction of  Associative for the coproduct  Sum k 6free construction of Disassociative for the coproduct  Sum k #$%&'()*+,-./0123456bc#$%&'()*+,-./0123456)*+,-./012#$%&'(3456 #$%&'()*+,-./0123456bc %non-portable (class-associated types) experimentalEdward Kmett <ekmett@gmail.com> Safe-Infered7JA Co-CCC has full-fledged comonoidal finite coproducts and coexponentials <A << has full-fledged monoidal finite products and exponentials 789:;<=>?@ABCDd789:;<=>?@ABCD<=>?@AB789:;CD789:;<=>?@ABCDd %non-portable (class-associated types) experimentalEdward Kmett <ekmett@gmail.com> Safe-InferedEA category in which G is an isomorphism G"The canonical factoring morphism. EFGeEFGGEFEFGe &non-portable (functional-dependencies) experimentalEdward Kmett <ekmett@gmail.com> Safe-InferedHIJKLMNfghijklmnopHIJKLMNIJHMNKLHIJKLMNfghijklmnopq   !"#$%&'()*+,-./0123456789:;<=>?@A B C D E F G H I J K L M N O P Q R S T U V V W WXYZ[\]^_`abcdefghijkl m n o p q r s t u v w x yzcategories-1.0Control.Category.DiscreteControl.Categorical.ObjectControl.Category.DualControl.Categorical.BifunctorControl.Category.AssociativeControl.Category.MonoidalControl.Category.BraidedControl.Category.Cartesian!Control.Category.Cartesian.ClosedControl.Category.DistributiveControl.Categorical.FunctorDiscreteRefl liftDiscretecastinverseHasInitialObjectInitialinitiateHasTerminalObjectTerminal terminateDualrunDual BifunctorbimapQFunctorsecondPFunctorfirstdifirstdimap Associative associate disassociateMonoidalIdidlidrcoidlcoidr SymmetricBraidedbraidswap CoCartesianSuminlinrcodiag||| CartesianProductfstsnddiag&&& bimapProduct braidProductassociateProductdisassociateProductbimapSumbraidSum associateSumdisassociateSumCoCCCCoexpcoapplycocurry uncocurryCCCExpapplycurryuncurryunitCCC counitCCC unitCoCCC counitCoCCC Distributive distributefactor EndofunctorFunctorfmapLoweredFunctor LiftedFunctor$fCategoryDiscrete $fDataDual$fTypeable2Dual$fCategoryDual$fQFunctor(->)(->)(->)$fBifunctorEither(->)(->)(->)$fQFunctorEither(->)(->)$fPFunctorEither(->)(->)$fBifunctor(,)(->)(->)(->)$fQFunctor(,)(->)(->)$fPFunctor(,)(->)(->)$fAssociative(->)Either$fAssociative(->)(,)$fMonoidal(->)Either$fMonoidal(->)(,)$fSymmetric(->)(,)$fSymmetric(->)Either$fBraided(->)(,)$fBraided(->)Either$fCoCartesian(->)$fCartesian(->) $fCCC(->)$fDistributive(->)$fFunctorIO(->)(->)$fFunctor[](->)(->)$fFunctorMaybe(->)(->)$fFunctorEither(->)(->)$fFunctor(,)(->)(->)$fFunctorLiftedFunctor(->)(->)$fFunctorLoweredFunctor$fDataLoweredFunctor$fTypeable1LoweredFunctor$fDataLiftedFunctor$fTypeable1LiftedFunctor