úÎIļDN      !"#$%&'()*+,-./0123456789:;<= > ? @ A B C D E F G H I J K L M  portable provisionalEdward Kmett <ekmett@gmail.com>A N sans O. Minimal definition: Either  or  OIf defining both, then the following laws (the default definitions) must hold:   join = (>>- id)  m >>- f = join (fmap f m) Laws:  4 induced definition of <.>: f <.> x = f >>- (<$> x) 1Finally, there are two associativity conditions:  G 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 ; associativity of (->-): (f ->- g) ->- h = f ->- (g ->- h) 8Transform a Apply into an Applicative by adding a unit.  Wrap an P to be used as a member of   )A strong lax semi-monoidal endofunctor.  This is equivalent to an P without Q. Laws: B associative composition: (.) <$> u <.> v <.> w = u <.> (v <.> w) a .> b = const id  $ a  . b a  . b = const <$ a  . b TODO: move into Data.Functor  A variant of  with the arguments reversed. 3Lift a binary function into a comonad with zipping 4Lift a ternary function into a comonad with zipping RAn S is a P, but it is an instance of  TA U is not a N, but it is an instance of  VAn IntMap is not P, but it is an instance of   W A Map is not P, but it is an instance of          portable provisionalEdward Kmett <ekmett@gmail.com>1A subset of monad transformers can transform any  as well. portable provisionalEdward Kmett <ekmett@gmail.com> !"X sans Y # !"#"# ! ! !"##portable provisionalEdward Kmett <ekmett@gmail.com>$%&$%&$%&$%&%&portable provisionalEdward Kmett <ekmett@gmail.com>    portable provisionalEdward Kmett <ekmett@gmail.com> Z[\'()*+],-GUsable default for foldMap, but only if you define bifoldMap1 yourself '()*+,-'()*+,-'()()*+,-portable provisionalEdward Kmett <ekmett@gmail.com>./01./01./01./0/01portable provisionalEdward Kmett <ekmett@gmail.com> ^_`2345678EUsable default for foldMap, but only if you define foldMap1 yourself 23456782345678234345678portable provisionalEdward Kmett <ekmett@gmail.com>9:;<9:;<9:;<9:;:;< portable provisionalEdward Kmett <ekmett@gmail.com>=Laws:  C <!> is associative: (a <!> b) <!> c = a <!> (b <!> c) K <$> left-distributes over <!>: f <$> (a <!> b) = (f <$> a) <!> (f <$> b) If extended to an a then > should equal b. Ideally, an instance of = also satisfies the "left distributon" law of  MonadPlus with respect to  .:  K <.> right-distributes over <!>: (a <!> b) <.> c = (a <.> c) <!> (b <.> c) But c, d, e a, fg e m, and STM satisfy the alternative  " left catch" law instead:   pure a <!> b = pure a PHowever, this variation cannot be stated purely in terms of the dependencies of =. JWhen 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  or N is = provided to yield variations of the right distributive law: + (m <!> n) >>- f = (m >>- f) <!> (m >>- f) + (m <!> n) >>= f = (m >>= f) <!> (m >>= f) >( |) without a required empty ?@h-This instance does not actually satisfy the ( .) right distributive law  It instead satisfies the  Left-Catch law  =>?@=>?@=>?@>?@ portable provisionalEdward Kmett <ekmett@gmail.com>ALaws:   zero <!> m = m  m <!> zero = m If extended to an a then B should equal i. B =>?@ABABABB CDECDECDECDEDE portable provisionalEdward Kmett <ekmett@gmail.com>F)A strong lax semi-monoidal endofunctor.  This is equivalent to an  Applicative without pure. Laws: B associative composition: (.) <$> u <.> v <.> w = u <.> (v <.> w) GHa .> b = const id  $ a  . b Ia  . b = const <$ a  . b JKL3Lift a binary function into a comonad with zipping M4Lift a ternary function into a comonad with zipping jklmFGHIJKLMFGHIJKLMFGHIGHIJKLMn !"#$%&'()*+,--./01234456789:;<=>?@ABCDEFGHIJK L M N O P Q R R S T U V W X Y Z [\]^_^`abcdebfghijkjlmmnommn^p^qrstuvwxyz{yz{ |^}~€~~‚~ƒ„semigroupoids-1.2.1Data.Functor.BindData.Functor.Bind.TransData.SemigroupoidData.Semigroupoid.DualData.Semigroup.BifoldableData.Semigroup.BitraversableData.Semigroup.FoldableData.Semigroup.TraversableData.Functor.AltData.Functor.PlusData.Semigroupoid.StaticData.Bifunctor.ApplyData.Traversable.InstancesData.Functor.ApplybaseGHC.BaseFunctor Data.Functor<$><$fmapBind>>-join MaybeApply runMaybeApplyWrappedApplicativeWrapApplicativeunwrapApplicativeApply<.>.><.$><..>liftF2liftF3 returning-<<->--<- apDefault BindTransliftBSemigetSemiWrappedCategory WrapCategoryunwrapCategory SemigroupoidoDualgetDual Bifoldable1bifold1 bifoldMap1 bitraverse1_bifor1_ bisequenceA1_bifoldMapDefault1Bitraversable1 bitraverse1 bisequence1bifoldMap1Default Foldable1fold1foldMap1 traverse1_for1_ sequenceA1_foldMapDefault1 Traversable1 traverse1 sequence1foldMap1DefaultAltsomemanyPluszeroStatic runStaticBiapply<<.>>.>><<.<<$>><<..>>bilift2bilift3MonadreturnControl.Applicative Applicativepure $fBindIntMapcontainers-0.4.0.0 Data.IntMapIntMap $fBindMapData.MapMap $fApplyIntMap $fApplyMapControl.CategoryCategoryidActgetActignore Alternative<|> Data.MaybeMaybeghc-prim GHC.TypesIO Data.EitherEithertransformers-0.2.2.0Control.Monad.Trans.ErrorErrorT$fAltIOemptybifunctors-0.1Data.Bifunctorsecondfirstbimap Bifunctor