This module describes a structure intermediate between a functor and
a monad: it provides pure expressions and sequencing, but no binding.
(Technically, a strong lax monoidal functor.) For more details, see
Applicative Programming with Effects,
by Conor McBride and Ross Paterson, online at
This interface was introduced for parsers by Niklas Röjemo, because
it admits more sharing than the monadic interface. The names here are
mostly based on recent parsing work by Doaitse Swierstra.
This class is also useful with instances of the
A functor with application.
Instances should satisfy the following laws:
pure id <*> v = v
pure (.) <*> u <*> v <*> w = u <*> (v <*> w)
pure f <*> pure x = pure (f x)
u <*> pure y = pure ($ y) <*> u
- ignore left value
u *> v = pure (const id) <*> u <*> v
- ignore right value
u <* v = pure const <*> u <*> v
The Functor instance should satisfy
fmap f x = pure f <*> x
If f is also a Monad, define pure = return and (<*>) = ap.
Minimal complete definition: pure and <*>.
|Lift a value.
|(<*>) :: f (a -> b) -> f a -> f b||Source|
|(*>) :: f a -> f b -> f b||Source|
|Sequence actions, discarding the value of the first argument.
|(<*) :: f a -> f b -> f a||Source|
|Sequence actions, discarding the value of the second argument.
A monoid on applicative functors.
Minimal complete definition: empty and <|>.
some and many should be the least solutions of the equations:
|The identity of <|>
|(<|>) :: f a -> f a -> f a||Source|
|An associative binary operation
|One or more.
|Zero or more.
|newtype WrappedMonad m a ||Source|
|newtype WrappedArrow a b c ||Source|
|An infix synonym for fmap.
|Replace all locations in the input with the same value.
The default definition is fmap . const, but this may be
overridden with a more efficient version.
|A variant of <*> with the arguments reversed.
|Lift a function to actions.
This function may be used as a value for fmap in a Functor instance.
|Lift a binary function to actions.
|Lift a ternary function to actions.
|One or none.
|Produced by Haddock version 2.6.0|