3|      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~(C) 2011-2015 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisional polykindsSafe(C) 2011-2015 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportableSafeQR*  !"#$%&'()*+,-./0123   &   !"#$%&'()*+,-./0123(C) 2011-2015 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportableSafe5 Iduplicated = extended id fmap (fmap f) . duplicated = duplicated . fmap f6 !extended f = fmap f . duplicated456789:;<=>?@ABCDEF456456456789:;<=>?@ABCDEF(C) 2011-2015 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportableSafe I a V b "a    a U b J a W b "a   a U b KA  sans .Minimal definition: Either M or LNIf defining both, then the following laws (the default definitions) must hold: )join = (>>- id) m >>- f = join (fmap f m)Laws: 2induced definition of <.>: f <.> x = f >>- (<$> x)0Finally, there are two associativity conditions: associativity of (>>-): (m >>- f) >>- g == m >>- (\x -> f x >>- g) associativity of join: join . join = join . fmap join>These can both be seen as special cases of the constraint that 9associativity of (->-): (f ->- g) ->- h = f ->- (g ->- h)N7Transform a Apply into an Applicative by adding a unit.QWrap an  to be used as a member of TTBA strong lax semi-monoidal endofunctor. This is equivalent to an  without .Laws: ()  u U v U w = u U (v U w) x U (f  y) = ( f)  x U y f  (x U y) = (f )  x U y The laws imply that V and W really ignore their left and right results, respectively, and really return their right and left results, respectively. Specifically, (mf  m) V (nf  n) = nf  (m V n) (mf  m) W (nf  n) = mf  (m W n) V  a V b =    a U bW  a W b =   a U bkAn  is not a , but it is an instance of KlA  is not a , but it is an instance of KAn IntMap is not , but it is an instance of T A Map is not , but it is an instance of TsGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~GHJIKMLNOPQRSTUWVXYTUVWQRSNOPKLMYXGHIJgGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~H4I4J4L1U4V4W4(C) 2011-2015 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportableSafe A variant of U with the arguments reversed.2Lift a binary function into a comonad with zipping3Lift a ternary function into a comonad with zippingNOPQRSTUWVTUVWQRSNOP4(C) 2011-2015 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportableSafeKMLNOPQRSTUWVXYTUVWQRSNOPKLMYX111(C) 2011-2015 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportableSafe1A subset of monad transformers can transform any K as well.  (C) 2007-2015 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportableSafe+D sans  Ahttp://en.wikipedia.org/wiki/Band_(mathematics)#Rectangular_bands  (C) 2007-2015 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportableSafe+D (C) 2011-2015 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisional polykindsSafe+9;Dsemigroupoid with inverses. This technically should be a category with inverses, except we need to use Ob to define the valid objects for the category (C) 2011-2015 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisional polykindsSafe+D (C) 2011-2015 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> experimentalnon-portable (flexible MPTCs)Safe+9:;<=D (C) 2011-2015 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportableSafeFUsable default for foldMap, but only if you define bifoldMap1 yourself   (C) 2011-2015 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportable Trustworthy<OQRTLaws: <!> is associative: (a <!> b) <!> c = a <!> (b <!> c) <$> left-distributes over <!>: f <$> (a <!> b) = (f <$> a) <!> (f <$> b)If extended to an  then  should equal .Ideally, an instance of I also satisfies the "left distributon" law of MonadPlus with respect to U: I<.> right-distributes over <!>: (a <!> b) <.> c = (a <.> c) <!> (b <.> c)But , ,  a,  e m, and STM3 satisfy the alternative "left catch" law instead: pure a <!> b = pure aPHowever, this variation cannot be stated purely in terms of the dependencies of .rWhen and if MonadPlus is successfully refactored, this class should also be refactored to remove these instances.BThe right distributive law should extend in the cases where the a K or @ is provided to yield variations of the right distributive law: S(m <!> n) >>- f = (m >>- f) <!> (m >>- f) (m <!> n) >>= f = (m >>= f) <!> (m >>= f) without a required empty-This instance does not actually satisfy the (U3) right distributive law It instead satisfies the  Left-Catch law*     NOPQRSTUWV%     3(C) 2011-2015 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportableSafeQRLaws: zero <!> m = m m <!> zero = mIf extended to an  then  should equal ." !"#$%&'()*+,-./0123456789:;<=>NOPQRSTUWV! !"#$%&'()*+,-./0123456789:;<=>(C) 2011-2015 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisional polykindsSafe?@ABCDEFGHIJKLMN?@A?@A?@ABCDEFGHIJKLMN(C) 2011-2015 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportableSafeO Insert an m- between each pair of 't m'. Equivalent to P with  as the second argument.4intercalate1 ", " $ "hello" :| ["how", "are", "you"]"hello, how, are, you"!intercalate1 ", " $ "hello" :| []"hello"3intercalate1 mempty $ "I" :| ["Am", "Fine", "You?"] "IAmFineYou?"PInsert m between each pair of m derived from a.0intercalateMap1 " " show $ True :| [False, True]"True False True"%intercalateMap1 " " show $ True :| []"True"TDUsable default for foldMap, but only if you define foldMap1 yourselfOPQRSTUVWXY OPQRSTU OPQRSTUOPQRSTUVWXY(C) 2011-2015 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportableSafeQR*Z[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Z[\]^_]^_Z[\&Z[\]^_`abcdefghijklmnopqrstuvwxyz{|}~(C) 2011-2015 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportableSafe]^_]^_(C) 2011-2015 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportableSafeZ[\Z[\(C) 2011-2015 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportableSafeLift binary functionsLift ternary functions  GHJI GHIJ 4 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijjklmnopqrstuvwxyz{|}~                     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWWXYZ[\]^_`abcdefghijklm  nopqrstuvwxyz{|}~    (semigroupoids-5.2-AixK2JRf3G5HuIf81tJ15lData.Functor.ApplyData.Bifunctor.ApplyData.Semigroup.Foldable.ClassData.Functor.ExtendData.Functor.BindData.Functor.Bind.ClassData.Functor.Bind.TransData.SemigroupoidData.Semigroupoid.Dual Data.GroupoidData.IsomorphismData.Semigroupoid.ObData.Semigroup.BifoldableData.Functor.AltData.Functor.PlusData.Semigroupoid.StaticData.Semigroup.Foldable Data.Semigroup.Traversable.ClassData.Semigroup.BitraversableData.Semigroup.TraversableData.Traversable.InstancesbaseGHC.BasefmapFunctorData.Bifunctorsecondfirstbimap Bifunctor Data.Functor$><$><$'bifunctors-5.4.2-FZrmj8WklPbIT4LBQhjbnYData.Biapplicative<<$>> Bifoldable1bifold1 bifoldMap1 Foldable1fold1foldMap1$fFoldable1Joker$fFoldable1(,)$fFoldable1NonEmpty$fFoldable1Sum$fFoldable1Reverse$fFoldable1Product$fFoldable1Lift$fFoldable1Compose$fFoldable1Backwards$fFoldable1IdentityT$fFoldable1Tagged$fFoldable1Identity$fFoldable1Tree$fBifoldable1WrappedBifunctor$fBifoldable1Tannen$fBifoldable1Product$fBifoldable1Joker$fFoldable1Join$fBifoldable1Flip$fBifoldable1Clown$fBifoldable1Biff$fBifoldable1Tagged$fBifoldable1Const$fBifoldable1(,,,,)$fBifoldable1(,,,)$fBifoldable1(,,)$fBifoldable1(,)$fBifoldable1Either$fBifoldable1Arg$fFoldable1:.: $fFoldable1V1$fFoldable1:+:$fFoldable1:*:$fFoldable1Par1 $fFoldable1M1$fFoldable1Rec1Extend duplicatedextended $fExtendSum$fExtendNonEmpty$fExtendIdentityT$fExtendIdentity$fExtendTracedT$fExtendStoreT $fExtendEnvT $fExtendTree $fExtendSeq $fExtend(->) $fExtend(,)$fExtendEither $fExtendMaybe $fExtendProxy$fExtendTagged $fExtend[]Biapply<<.>>.>><<.Bind>>-join MaybeApply runMaybeApplyWrappedApplicativeWrapApplicativeunwrapApplicativeApply<.>.><. returning apDefault$fBiapplyWrappedBifunctor$fBiapplyTannen$fBiapplyProduct $fApplyJoin$fBiapplyJoker $fBiapplyFlip$fBiapplyClown $fBiapplyBiff$fBiapplyTagged$fBiapplyConst$fBiapply(,,,,)$fBiapply(,,,) $fBiapply(,,) $fBiapplyArg $fBiapply(,) $fBindTree $fBindSeq $fBindIntMap $fBindMap $fBindContT $fBindRWST $fBindRWST0 $fBindStateT $fBindStateT0 $fBindWriterT$fBindWriterT0 $fBindReaderT $fBindExceptT $fBindErrorT $fBindListT $fBindMaybeT$fBindWrappedMonad$fBindIdentityT$fBindIdentity $fBindOption $fBindMaybe$fBindIO$fBindNonEmpty$fBind[] $fBind(->) $fBindProduct $fBindEither $fBindProxy $fBindTagged $fBind(,)$fApplyCokleisli$fComonadMaybeApply$fExtendMaybeApply$fApplicativeMaybeApply$fApplyMaybeApply$fFunctorMaybeApply$fAlternativeWrappedApplicative$fApplicativeWrappedApplicative$fApplyWrappedApplicative$fFunctorWrappedApplicative$fApplyTracedT $fApplyStoreT $fApplyEnvT $fApplyContT $fApplyRWST $fApplyRWST0 $fApplyStateT$fApplyStateT0$fApplyWriterT$fApplyWriterT0 $fApplyListT$fApplyReaderT$fApplyExceptT $fApplyErrorT $fApplyMaybeT $fApplyTree $fApplySeq $fApplyIntMap $fApplyMap$fApplyWrappedArrow$fApplyWrappedMonad$fApplyIdentityT$fApplyIdentity $fApplyOption $fApplyMaybe $fApplyIO $fApply[]$fApplyZipList $fApply(->) $fApplyConst $fApplyEither$fApplyNonEmpty $fApply(,)$fApplyReverse$fApplyProduct $fApplyLift$fApplyConstant$fApplyCompose$fApplyBackwards $fApplyProxy $fApplyTagged<..>liftF2liftF3-<<->--<- BindTransliftB$fBindTransContT$fBindTransRWST$fBindTransRWST0$fBindTransStateT$fBindTransStateT0$fBindTransWriterT$fBindTransWriterT0$fBindTransReaderT$fBindTransIdentityTSemigetSemiWrappedCategory WrapCategoryunwrapCategory Semigroupoido$fCategorykSemi$fSemigroupoidkSemi$fCategorykWrappedCategory$fSemigroupoidkWrappedCategory$fSemigroupoidTYPEOp$fSemigroupoidTYPECokleisli$fSemigroupoidTYPEKleisli$fSemigroupoidTYPE(,)$fSemigroupoidTYPE(->)DualgetDual$fCategorykDual$fSemigroupoidkDualGroupoidinv$fGroupoidkDualIsoembedproject$fCategorykIso$fGroupoidkIso$fSemigroupoidkIsoObsemiid $fObTYPE(->)a$fObTYPECokleislia$fObTYPEKleislia bitraverse1_bifor1_ bisequenceA1_bifoldMapDefault1 $fFunctorAct$fSemigroupActAltsomemany $fAltReverse $fAltProduct $fAltLift $fAltCompose$fAltBackwards $fAltRWST $fAltRWST0 $fAltWriterT $fAltWriterT0 $fAltStateT $fAltStateT0 $fAltListT $fAltExceptT $fAltErrorT $fAltMaybeT $fAltReaderT$fAltIdentityT$fAltWrappedApplicative $fAltNonEmpty$fAltSeq $fAltIntMap$fAltMap$fAltWrappedArrow$fAltWrappedMonad $fAltOption $fAltMaybe$fAlt[]$fAltIO $fAltEither $fAltProxy$fAltV1$fAltU1 $fAltRec1$fAltM1$fAlt:*:Pluszero $fPlusReverse $fPlusProduct $fPlusLift $fPlusCompose$fPlusBackwards $fPlusRWST $fPlusRWST0 $fPlusWriterT$fPlusWriterT0 $fPlusStateT $fPlusStateT0 $fPlusListT $fPlusExceptT $fPlusErrorT $fPlusMaybeT $fPlusReaderT$fPlusIdentityT$fPlusWrappedApplicative $fPlusSeq $fPlusIntMap $fPlusMap$fPlusWrappedArrow$fPlusWrappedMonad $fPlusOption $fPlusMaybe$fPlus[]$fPlusIO $fPlusRec1$fPlusM1 $fPlus:*:$fPlusU1 $fPlusProxyStatic runStatic$fArrowChoiceStatic$fArrowPlusStatic$fArrowZeroStatic $fArrowStatic$fCategoryTYPEStatic$fSemigroupoidTYPEStatic$fComonadStatic$fExtendStatic$fApplicativeStatic $fPlusStatic $fAltStatic $fApplyStatic$fFunctorStatic intercalate1intercalateMap1 traverse1_for1_ sequenceA1_foldMapDefault1asum1$fSemigroupAlt_$fSemigroupJoinWith Traversable1 traverse1 sequence1Bitraversable1 bitraverse1 bisequence1$fTraversable1Joker$fTraversable1(,)$fTraversable1NonEmpty$fTraversable1Tree$fTraversable1Tagged$fTraversable1Sum$fTraversable1Reverse$fTraversable1Product$fTraversable1Lift$fTraversable1Compose$fTraversable1Backwards$fTraversable1IdentityT$fTraversable1Identity$fTraversable1:.:$fTraversable1:+:$fTraversable1:*:$fTraversable1V1$fTraversable1Par1$fTraversable1M1$fTraversable1Rec1 $fBitraversable1WrappedBifunctor$fBitraversable1Tannen$fBitraversable1Product$fBitraversable1Joker$fTraversable1Join$fBitraversable1Flip$fBitraversable1Clown$fBitraversable1Biff$fBitraversable1Tagged$fBitraversable1Const$fBitraversable1(,,,,)$fBitraversable1(,,,)$fBitraversable1(,,)$fBitraversable1(,)$fBitraversable1Either$fBitraversable1ArgbifoldMap1DefaultfoldMap1Default<<..>>bilift2bilift3constControl.CategoryidMonadreturn Applicativepure.containers-0.5.7.1Data.IntMap.BaseIntMap Data.Map.BaseMapCategoryActgetActignore Alternative<|>Maybeghc-prim GHC.TypesIO Data.EitherEithertransformers-0.5.2.0Control.Monad.Trans.ErrorErrorTMagicrunMagicemptyAlt_getAlt_JoinWithjoinee