A functor with application.
Instances should satisfy the following laws:
* *identity* pure id <*> v = v
* *composition* pure (.) <*> u <*> v <*> w = u <*> (v <*> w)
* *homomorphism* pure f <*> pure x = pure (f x)
* *interchange* 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 <*>.

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 http://www.soi.city.ac.uk/~ross/papers/Applicative.html.
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 Data.Traversable.Traversable class.