A functor with application, providing operations to
- embed pure expressions (pure), and
- sequence computations and combine their results (<*>
and liftA2).
A minimal complete definition must include implementations of
pure and of either
<*> or
liftA2. If it
defines both, then they must behave the same as their default
definitions:
(<*>) = liftA2 id
liftA2 f x y = f <$> x <*> y
Further, any definition must satisfy the following:
The other methods have the following default definitions, which may be
overridden with equivalent specialized implementations:
As a consequence of these laws, the
Functor instance for
f will satisfy
It may be useful to note that supposing
forall x y. p (q x y) = f x . g y
it follows from the above that
liftA2 p (liftA2 q u v) = liftA2 f u . liftA2 g v
If
f is also a
Monad, it should satisfy
(which implies that
pure and
<*> satisfy the
applicative functor laws).