HORIZON HASKELLDocslts/ghc-10.0.x77a86622026-10-31Search packagesCtrl K
Theme: |

GHC 10.0.0.20260917 · lts/ghc-10.0.x · 77a8662 · 2026-10-31

Modulesemigroupoids-6.0.2Haskell2010

Data.Functor.Bind.Class

This module is used to resolve the cyclic we get from defining these classes here rather than in a package upstream. Otherwise we'd get orphaned heads for many instances on the types in transformers and bifunctors.

Contents
  1. Applyable functors
  2. Wrappers
  3. Bindable functors
  4. Biappliable bifunctors
Synopsis

Applyable functors

classclass Functor f => Apply (f :: Type -> Type) where

A strong lax semi-monoidal endofunctor. This is equivalent to an Applicative without pure.

Laws:

(.) <$> u <.> v <.> w = u <.> (v <.> w)
x <.> (f <$> y) = (. f) <$> x <.> y
f <$> (x <.> y) = (f .) <$> x <.> y

The laws imply that .> and <. really ignore their left and right results, respectively, and really return their right and left results, respectively. Specifically,

(mf <$> m) .> (nf <$> n) = nf <$> (m .> n)
(mf <$> m) <. (nf <$> n) = mf <$> (m <. n)

Methods

  • (<.>) :: f (a -> b) -> f a -> f binfixl 4
  • (.>) :: f a -> f b -> f binfixl 4
     a .> b = const id <$> a <.> b
  • (<.) :: f a -> f b -> f ainfixl 4
     a <. b = const <$> a <.> b
  • liftF2 :: (a -> b -> c) -> f a -> f b -> f c

    Lift a binary function into a comonad with zipping

Instances69Apply, …

Wrappers

newtypenewtype WrappedApplicative (f :: Type -> Type) a

Wrap an Applicative to be used as a member of Apply

Instances6Functor, Applicative, Alternative, Alt, Apply, Plus
newtypenewtype MaybeApply (f :: Type -> Type) a

Transform an Apply into an Applicative by adding a unit.

Constructors

Instances5Functor, Applicative, Comonad, Apply, Extend
value(<.*>) :: Apply f => f (a -> b) -> MaybeApply f a -> f b

Apply a non-empty container of functions to a possibly-empty-with-unit container of values.

value(<*.>) :: Apply f => MaybeApply f (a -> b) -> f a -> f b

Apply a possibly-empty-with-unit container of functions to a non-empty container of values.

Bindable functors

classclass Apply m => Bind (m :: Type -> Type) where

A Monad sans return.

Minimal definition: Either join or >>-

If defining both, then the following laws (the default definitions) must hold:

join = (>>- id)
m >>- f = join (fmap f m)

Laws:

induced definition of <.>: f <.> x = f >>- (<$> x)

Finally, 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

associativity of (->-): (f ->- g) ->- h = f ->- (g ->- h)

Methods

  • (>>-) :: m a -> (a -> m b) -> m binfixl 1
  • join :: m (m a) -> m a
Instances51Bind, …
  • Bind ComplexDefined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind FirstDefined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind LastDefined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind MaxDefined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind MinDefined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind IntMapDefined in semigroupoids-6.0.2 · Data.Functor.Bind.Class

    An IntMap is not a Monad, but it is an instance of Bind

  • Bind SeqDefined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind TreeDefined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind NonEmptyDefined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind IdentityDefined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind FirstDefined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind LastDefined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind DownDefined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind DualDefined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind ProductDefined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind SumDefined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind Par1Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind MaybeDefined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind QDefined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind IODefined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind []Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Monad m => Bind (WrappedMonad m)Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Semigroup m => Bind (Tuple2 m)Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class

    A (,) m is not a Monad unless its m is a Monoid, but it is an instance of Bind

  • Ord k => Bind (Map k)Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class

    A 'Map k' is not a Monad, but it is an instance of Bind

  • Bind ProxyDefined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind U1Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind V1Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class

    A V1 is not a Monad, but it is an instance of Bind

  • Bind (ST s)Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind (Either a)Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind (ST s)Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • (Functor m, Monad m) => Bind (MaybeT m)Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • (Hashable k, Eq k) => Bind (HashMap k)Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class

    A 'HashMap k' is not a Monad, but it is an instance of Bind

  • Bind (Tagged a)Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind f => Bind (Alt f)Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind m => Bind (Rec1 m)Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind m => Bind (IdentityT m)Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind m => Bind (ReaderT e m)Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind m => Bind (StateT s m)Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind m => Bind (StateT s m)Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind m => Bind (WriterT w m)Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • (Functor m, Monad m) => Bind (ExceptT e m)Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • (Bind m, Semigroup w) => Bind (WriterT w m)Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class

    A WriterT w m is not a Monad unless its w is a Monoid, but it is an instance of Bind

  • (Bind m, Semigroup w) => Bind (WriterT w m)Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class

    A WriterT w m is not a Monad unless its w is a Monoid, but it is an instance of Bind

  • Bind (ContT r m)Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind ((->) m)Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • (Bind f, Bind g) => Bind (Product f g)Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • (Bind f, Bind g) => Bind (f :*: g)Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind f => Bind (M1 i c f)Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • Bind m => Bind (RWST r w s m)Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class
  • (Bind m, Semigroup w) => Bind (RWST r w s m)Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class

    An RWST r w s m is not a Monad unless its w is a Monoid, but it is an instance of Bind

  • (Bind m, Semigroup w) => Bind (RWST r w s m)Defined in semigroupoids-6.0.2 · Data.Functor.Bind.Class

    An RWST r w s m is not a Monad unless its w is a Monoid, but it is an instance of Bind

Biappliable bifunctors

classclass Bifunctor p => Biapply (p :: Type -> Type -> Type) where
#

Methods

  • (<<.>>) :: p (a -> b) (c -> d) -> p a c -> p b dinfixl 4
  • (.>>) :: p a b -> p c d -> p c dinfixl 4
    a .> b ≡ const id <$> a <.> b
    
  • (<<.) :: p a b -> p c d -> p a binfixl 4
    a <. b ≡ const <$> a <.> b
    
Instances14Biapply, …