<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Control.Applicative</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[ window.onload = function () {pageLoad();setSynopsis("mini_Control-Applicative.html");}; //]]> </script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">base-4.5.1.0: Basic libraries</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Portability</th><td>portable</td></tr><tr><th>Stability</th><td>experimental</td></tr><tr><th>Maintainer</th><td>libraries@haskell.org</td></tr><tr><th>Safe Haskell</th><td>Trustworthy</td></tr></table><p class="caption">Control.Applicative</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">Applicative functors </a></li><li><a href="#g:2">Alternatives </a></li><li><a href="#g:3">Instances </a></li><li><a href="#g:4">Utility functions </a></li></ul></div><div id="description"><p class="caption">Description</p><div class="doc"><p>This module describes a structure intermediate between a functor and a monad (technically, a strong lax monoidal functor). Compared with monads, this interface lacks the full power of the binding operation <code><a href="Control-Monad.html#v:-62--62--61-">>>=</a></code>, but </p><ul><li> it has more instances. </li><li> it is sufficient for many uses, e.g. context-free parsing, or the <code><a href="Data-Traversable.html#t:Traversable">Traversable</a></code> class. </li><li> instances can perform analysis of computations before they are executed, and thus produce shared optimizations. </li></ul><p>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 parsing work by Doaitse Swierstra. </p><p>For more details, see <em>Applicative Programming with Effects</em>, by Conor McBride and Ross Paterson, online at <a href="http://www.soi.city.ac.uk/~ross/papers/Applicative.html">http://www.soi.city.ac.uk/~ross/papers/Applicative.html</a>. </p></div></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><span class="keyword">class</span> <a href="Control-Monad.html#t:Functor">Functor</a> f => <a href="#t:Applicative">Applicative</a> f <span class="keyword">where</span><ul class="subs"><li><a href="#v:pure">pure</a> :: a -> f a</li><li><a href="#v:-60--42--62-">(<*>)</a> :: f (a -> b) -> f a -> f b</li><li><a href="#v:-42--62-">(*>)</a> :: f a -> f b -> f b</li><li><a href="#v:-60--42-">(<*)</a> :: f a -> f b -> f a</li></ul></li><li class="src short"><span class="keyword">class</span> <a href="Control-Applicative.html#t:Applicative">Applicative</a> f => <a href="#t:Alternative">Alternative</a> f <span class="keyword">where</span><ul class="subs"><li><a href="#v:empty">empty</a> :: f a</li><li><a href="#v:-60--124--62-">(<|>)</a> :: f a -> f a -> f a</li><li><a href="#v:some">some</a> :: f a -> f [a]</li><li><a href="#v:many">many</a> :: f a -> f [a]</li></ul></li><li class="src short"><span class="keyword">newtype</span> <a href="#t:Const">Const</a> a b = <a href="#v:Const">Const</a> {<ul class="subs"><li><a href="#v:getConst">getConst</a> :: a</li></ul>}</li><li class="src short"><span class="keyword">newtype</span> <a href="#t:WrappedMonad">WrappedMonad</a> m a = <a href="#v:WrapMonad">WrapMonad</a> {<ul class="subs"><li><a href="#v:unwrapMonad">unwrapMonad</a> :: m a</li></ul>}</li><li class="src short"><span class="keyword">newtype</span> <a href="#t:WrappedArrow">WrappedArrow</a> a b c = <a href="#v:WrapArrow">WrapArrow</a> {<ul class="subs"><li><a href="#v:unwrapArrow">unwrapArrow</a> :: a b c</li></ul>}</li><li class="src short"><span class="keyword">newtype</span> <a href="#t:ZipList">ZipList</a> a = <a href="#v:ZipList">ZipList</a> {<ul class="subs"><li><a href="#v:getZipList">getZipList</a> :: [a]</li></ul>}</li><li class="src short"><a href="#v:-60--36--62-">(<$>)</a> :: <a href="Control-Monad.html#t:Functor">Functor</a> f => (a -> b) -> f a -> f b</li><li class="src short"><a href="#v:-60--36-">(<$)</a> :: <a href="Control-Monad.html#t:Functor">Functor</a> f => a -> f b -> f a</li><li class="src short"><a href="#v:-60--42--42--62-">(<**>)</a> :: <a href="Control-Applicative.html#t:Applicative">Applicative</a> f => f a -> f (a -> b) -> f b</li><li class="src short"><a href="#v:liftA">liftA</a> :: <a href="Control-Applicative.html#t:Applicative">Applicative</a> f => (a -> b) -> f a -> f b</li><li class="src short"><a href="#v:liftA2">liftA2</a> :: <a href="Control-Applicative.html#t:Applicative">Applicative</a> f => (a -> b -> c) -> f a -> f b -> f c</li><li class="src short"><a href="#v:liftA3">liftA3</a> :: <a href="Control-Applicative.html#t:Applicative">Applicative</a> f => (a -> b -> c -> d) -> f a -> f b -> f c -> f d</li><li class="src short"><a href="#v:optional">optional</a> :: <a href="Control-Applicative.html#t:Alternative">Alternative</a> f => f a -> f (<a href="Data-Maybe.html#t:Maybe">Maybe</a> a)</li></ul></div><div id="interface"><h1 id="g:1">Applicative functors </h1><div class="top"><p class="src"><span class="keyword">class</span> <a href="Control-Monad.html#t:Functor">Functor</a> f => <a name="t:Applicative" class="def">Applicative</a> f <span class="keyword">where</span></p><div class="doc"><p>A functor with application, providing operations to </p><ul><li> embed pure expressions (<code><a href="Control-Applicative.html#v:pure">pure</a></code>), and </li><li> sequence computations and combine their results (<code><a href="Control-Applicative.html#v:-60--42--62-"><*></a></code>). </li></ul><p>A minimal complete definition must include implementations of these functions satisfying the following laws: </p><dl><dt><em>identity</em></dt><dd> <code><code><a href="Control-Applicative.html#v:pure">pure</a></code> <code><a href="Control-Category.html#v:id">id</a></code> <code><a href="Control-Applicative.html#v:-60--42--62-"><*></a></code> v = v</code> </dd><dt><em>composition</em></dt><dd> <code><code><a href="Control-Applicative.html#v:pure">pure</a></code> (.) <code><a href="Control-Applicative.html#v:-60--42--62-"><*></a></code> u <code><a href="Control-Applicative.html#v:-60--42--62-"><*></a></code> v <code><a href="Control-Applicative.html#v:-60--42--62-"><*></a></code> w = u <code><a href="Control-Applicative.html#v:-60--42--62-"><*></a></code> (v <code><a href="Control-Applicative.html#v:-60--42--62-"><*></a></code> w)</code> </dd><dt><em>homomorphism</em></dt><dd> <code><code><a href="Control-Applicative.html#v:pure">pure</a></code> f <code><a href="Control-Applicative.html#v:-60--42--62-"><*></a></code> <code><a href="Control-Applicative.html#v:pure">pure</a></code> x = <code><a href="Control-Applicative.html#v:pure">pure</a></code> (f x)</code> </dd><dt><em>interchange</em></dt><dd> <code>u <code><a href="Control-Applicative.html#v:-60--42--62-"><*></a></code> <code><a href="Control-Applicative.html#v:pure">pure</a></code> y = <code><a href="Control-Applicative.html#v:pure">pure</a></code> (<code><a href="Prelude.html#v:-36-">$</a></code> y) <code><a href="Control-Applicative.html#v:-60--42--62-"><*></a></code> u</code> </dd></dl><p>The other methods have the following default definitions, which may be overridden with equivalent specialized implementations: </p><pre> u <code><a href="Control-Applicative.html#v:-42--62-">*></a></code> v = <code><a href="Control-Applicative.html#v:pure">pure</a></code> (<code><a href="Prelude.html#v:const">const</a></code> <code><a href="Control-Category.html#v:id">id</a></code>) <code><a href="Control-Applicative.html#v:-60--42--62-"><*></a></code> u <code><a href="Control-Applicative.html#v:-60--42--62-"><*></a></code> v u <code><a href="Control-Applicative.html#v:-60--42-"><*</a></code> v = <code><a href="Control-Applicative.html#v:pure">pure</a></code> <code><a href="Prelude.html#v:const">const</a></code> <code><a href="Control-Applicative.html#v:-60--42--62-"><*></a></code> u <code><a href="Control-Applicative.html#v:-60--42--62-"><*></a></code> v </pre><p>As a consequence of these laws, the <code><a href="Control-Monad.html#t:Functor">Functor</a></code> instance for <code>f</code> will satisfy </p><pre> <code><a href="Control-Monad.html#v:fmap">fmap</a></code> f x = <code><a href="Control-Applicative.html#v:pure">pure</a></code> f <code><a href="Control-Applicative.html#v:-60--42--62-"><*></a></code> x </pre><p>If <code>f</code> is also a <code><a href="Control-Monad.html#t:Monad">Monad</a></code>, it should satisfy <code><code><a href="Control-Applicative.html#v:pure">pure</a></code> = <code><a href="Control-Monad.html#v:return">return</a></code></code> and <code>(<code><a href="Control-Applicative.html#v:-60--42--62-"><*></a></code>) = <code><a href="Control-Monad.html#v:ap">ap</a></code></code> (which implies that <code><a href="Control-Applicative.html#v:pure">pure</a></code> and <code><a href="Control-Applicative.html#v:-60--42--62-"><*></a></code> satisfy the applicative functor laws). </p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:pure" class="def">pure</a> :: a -> f a</p><div class="doc"><p>Lift a value. </p></div><p class="src"><a name="v:-60--42--62-" class="def">(<*>)</a> :: f (a -> b) -> f a -> f b</p><div class="doc"><p>Sequential application. </p></div><p class="src"><a name="v:-42--62-" class="def">(*>)</a> :: f a -> f b -> f b</p><div class="doc"><p>Sequence actions, discarding the value of the first argument. </p></div><p class="src"><a name="v:-60--42-" class="def">(<*)</a> :: f a -> f b -> f a</p><div class="doc"><p>Sequence actions, discarding the value of the second argument. </p></div></div><div class="subs instances"><p id="control.i:Applicative" class="caption collapser" onclick="toggleSection('i:Applicative')">Instances</p><div id="section.i:Applicative" class="show"><table><tr><td class="src"><a href="Control-Applicative.html#t:Applicative">Applicative</a> []</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Applicative.html#t:Applicative">Applicative</a> <a href="System-IO.html#t:IO">IO</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Applicative.html#t:Applicative">Applicative</a> <a href="Data-Maybe.html#t:Maybe">Maybe</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Applicative.html#t:Applicative">Applicative</a> <a href="GHC-Conc.html#t:STM">STM</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Applicative.html#t:Applicative">Applicative</a> <a href="Control-Applicative.html#t:ZipList">ZipList</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Applicative.html#t:Applicative">Applicative</a> Id</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Applicative.html#t:Applicative">Applicative</a> ((->) a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Applicative.html#t:Applicative">Applicative</a> (<a href="Data-Either.html#t:Either">Either</a> e)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Data-Monoid.html#t:Monoid">Monoid</a> a => <a href="Control-Applicative.html#t:Applicative">Applicative</a> (<a href="../ghc-prim-0.2.0.0/GHC-Tuple.html#t:-40--44--41-">(,)</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Applicative.html#t:Applicative">Applicative</a> (<a href="Control-Monad-ST-Safe.html#t:ST">ST</a> s)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Applicative.html#t:Applicative">Applicative</a> (<a href="Control-Monad-ST-Lazy-Safe.html#t:ST">ST</a> s)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad.html#t:Monad">Monad</a> m => <a href="Control-Applicative.html#t:Applicative">Applicative</a> (<a href="Control-Applicative.html#t:WrappedMonad">WrappedMonad</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Data-Monoid.html#t:Monoid">Monoid</a> m => <a href="Control-Applicative.html#t:Applicative">Applicative</a> (<a href="Control-Applicative.html#t:Const">Const</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Applicative.html#t:Applicative">Applicative</a> (StateR s)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Applicative.html#t:Applicative">Applicative</a> (StateL s)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Arrow.html#t:Arrow">Arrow</a> a => <a href="Control-Applicative.html#t:Applicative">Applicative</a> (<a href="Control-Applicative.html#t:WrappedArrow">WrappedArrow</a> a b)</td><td class="doc empty"> </td></tr></table></div></div></div><h1 id="g:2">Alternatives </h1><div class="top"><p class="src"><span class="keyword">class</span> <a href="Control-Applicative.html#t:Applicative">Applicative</a> f => <a name="t:Alternative" class="def">Alternative</a> f <span class="keyword">where</span></p><div class="doc"><p>A monoid on applicative functors. </p><p>Minimal complete definition: <code><a href="Control-Applicative.html#v:empty">empty</a></code> and <code><a href="Control-Applicative.html#v:-60--124--62-"><|></a></code>. </p><p>If defined, <code><a href="Control-Applicative.html#v:some">some</a></code> and <code><a href="Control-Applicative.html#v:many">many</a></code> should be the least solutions of the equations: </p><ul><li><pre>some v = (:) <code><a href="Control-Applicative.html#v:-60--36--62-"><$></a></code> v <code><a href="Control-Applicative.html#v:-60--42--62-"><*></a></code> many v</pre></li><li><pre>many v = some v <code><a href="Control-Applicative.html#v:-60--124--62-"><|></a></code> <code><a href="Control-Applicative.html#v:pure">pure</a></code> []</pre></li></ul></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:empty" class="def">empty</a> :: f a</p><div class="doc"><p>The identity of <code><a href="Control-Applicative.html#v:-60--124--62-"><|></a></code> </p></div><p class="src"><a name="v:-60--124--62-" class="def">(<|>)</a> :: f a -> f a -> f a</p><div class="doc"><p>An associative binary operation </p></div><p class="src"><a name="v:some" class="def">some</a> :: f a -> f [a]</p><div class="doc"><p>One or more. </p></div><p class="src"><a name="v:many" class="def">many</a> :: f a -> f [a]</p><div class="doc"><p>Zero or more. </p></div></div><div class="subs instances"><p id="control.i:Alternative" class="caption collapser" onclick="toggleSection('i:Alternative')">Instances</p><div id="section.i:Alternative" class="show"><table><tr><td class="src"><a href="Control-Applicative.html#t:Alternative">Alternative</a> []</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Applicative.html#t:Alternative">Alternative</a> <a href="Data-Maybe.html#t:Maybe">Maybe</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Applicative.html#t:Alternative">Alternative</a> <a href="GHC-Conc.html#t:STM">STM</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad.html#t:MonadPlus">MonadPlus</a> m => <a href="Control-Applicative.html#t:Alternative">Alternative</a> (<a href="Control-Applicative.html#t:WrappedMonad">WrappedMonad</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Control-Arrow.html#t:ArrowZero">ArrowZero</a> a, <a href="Control-Arrow.html#t:ArrowPlus">ArrowPlus</a> a) => <a href="Control-Applicative.html#t:Alternative">Alternative</a> (<a href="Control-Applicative.html#t:WrappedArrow">WrappedArrow</a> a b)</td><td class="doc empty"> </td></tr></table></div></div></div><h1 id="g:3">Instances </h1><div class="top"><p class="src"><span class="keyword">newtype</span> <a name="t:Const" class="def">Const</a> a b </p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:Const" class="def">Const</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:getConst" class="def">getConst</a> :: a</dt><dd class="doc empty"> </dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:Const" class="caption collapser" onclick="toggleSection('i:Const')">Instances</p><div id="section.i:Const" class="show"><table><tr><td class="src"><a href="Control-Monad.html#t:Functor">Functor</a> (<a href="Control-Applicative.html#t:Const">Const</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Data-Monoid.html#t:Monoid">Monoid</a> m => <a href="Control-Applicative.html#t:Applicative">Applicative</a> (<a href="Control-Applicative.html#t:Const">Const</a> m)</td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">newtype</span> <a name="t:WrappedMonad" class="def">WrappedMonad</a> m a </p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:WrapMonad" class="def">WrapMonad</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:unwrapMonad" class="def">unwrapMonad</a> :: m a</dt><dd class="doc empty"> </dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:WrappedMonad" class="caption collapser" onclick="toggleSection('i:WrappedMonad')">Instances</p><div id="section.i:WrappedMonad" class="show"><table><tr><td class="src"><a href="Control-Monad.html#t:Monad">Monad</a> m => <a href="Control-Monad.html#t:Functor">Functor</a> (<a href="Control-Applicative.html#t:WrappedMonad">WrappedMonad</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad.html#t:Monad">Monad</a> m => <a href="Control-Applicative.html#t:Applicative">Applicative</a> (<a href="Control-Applicative.html#t:WrappedMonad">WrappedMonad</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad.html#t:MonadPlus">MonadPlus</a> m => <a href="Control-Applicative.html#t:Alternative">Alternative</a> (<a href="Control-Applicative.html#t:WrappedMonad">WrappedMonad</a> m)</td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">newtype</span> <a name="t:WrappedArrow" class="def">WrappedArrow</a> a b c </p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:WrapArrow" class="def">WrapArrow</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:unwrapArrow" class="def">unwrapArrow</a> :: a b c</dt><dd class="doc empty"> </dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:WrappedArrow" class="caption collapser" onclick="toggleSection('i:WrappedArrow')">Instances</p><div id="section.i:WrappedArrow" class="show"><table><tr><td class="src"><a href="Control-Arrow.html#t:Arrow">Arrow</a> a => <a href="Control-Monad.html#t:Functor">Functor</a> (<a href="Control-Applicative.html#t:WrappedArrow">WrappedArrow</a> a b)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Arrow.html#t:Arrow">Arrow</a> a => <a href="Control-Applicative.html#t:Applicative">Applicative</a> (<a href="Control-Applicative.html#t:WrappedArrow">WrappedArrow</a> a b)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Control-Arrow.html#t:ArrowZero">ArrowZero</a> a, <a href="Control-Arrow.html#t:ArrowPlus">ArrowPlus</a> a) => <a href="Control-Applicative.html#t:Alternative">Alternative</a> (<a href="Control-Applicative.html#t:WrappedArrow">WrappedArrow</a> a b)</td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">newtype</span> <a name="t:ZipList" class="def">ZipList</a> a </p><div class="doc"><p>Lists, but with an <code><a href="Control-Applicative.html#t:Applicative">Applicative</a></code> functor based on zipping, so that </p><pre>f <code><a href="Control-Applicative.html#v:-60--36--62-"><$></a></code> <code><a href="Control-Applicative.html#t:ZipList">ZipList</a></code> xs1 <code><a href="Control-Applicative.html#v:-60--42--62-"><*></a></code> ... <code><a href="Control-Applicative.html#v:-60--42--62-"><*></a></code> <code><a href="Control-Applicative.html#t:ZipList">ZipList</a></code> xsn = <code><a href="Control-Applicative.html#t:ZipList">ZipList</a></code> (zipWithn f xs1 ... xsn)</pre></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:ZipList" class="def">ZipList</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:getZipList" class="def">getZipList</a> :: [a]</dt><dd class="doc empty"> </dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:ZipList" class="caption collapser" onclick="toggleSection('i:ZipList')">Instances</p><div id="section.i:ZipList" class="show"><table><tr><td class="src"><a href="Control-Monad.html#t:Functor">Functor</a> <a href="Control-Applicative.html#t:ZipList">ZipList</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Applicative.html#t:Applicative">Applicative</a> <a href="Control-Applicative.html#t:ZipList">ZipList</a></td><td class="doc empty"> </td></tr></table></div></div></div><h1 id="g:4">Utility functions </h1><div class="top"><p class="src"><a name="v:-60--36--62-" class="def">(<$>)</a> :: <a href="Control-Monad.html#t:Functor">Functor</a> f => (a -> b) -> f a -> f b</p><div class="doc"><p>An infix synonym for <code><a href="Control-Monad.html#v:fmap">fmap</a></code>. </p></div></div><div class="top"><p class="src"><a name="v:-60--36-" class="def">(<$)</a> :: <a href="Control-Monad.html#t:Functor">Functor</a> f => a -> f b -> f a</p><div class="doc"><p>Replace all locations in the input with the same value. The default definition is <code><code><a href="Control-Monad.html#v:fmap">fmap</a></code> . <code><a href="Prelude.html#v:const">const</a></code></code>, but this may be overridden with a more efficient version. </p></div></div><div class="top"><p class="src"><a name="v:-60--42--42--62-" class="def">(<**>)</a> :: <a href="Control-Applicative.html#t:Applicative">Applicative</a> f => f a -> f (a -> b) -> f b</p><div class="doc"><p>A variant of <code><a href="Control-Applicative.html#v:-60--42--62-"><*></a></code> with the arguments reversed. </p></div></div><div class="top"><p class="src"><a name="v:liftA" class="def">liftA</a> :: <a href="Control-Applicative.html#t:Applicative">Applicative</a> f => (a -> b) -> f a -> f b</p><div class="doc"><p>Lift a function to actions. This function may be used as a value for <code><a href="Control-Monad.html#v:fmap">fmap</a></code> in a <code><a href="Control-Monad.html#t:Functor">Functor</a></code> instance. </p></div></div><div class="top"><p class="src"><a name="v:liftA2" class="def">liftA2</a> :: <a href="Control-Applicative.html#t:Applicative">Applicative</a> f => (a -> b -> c) -> f a -> f b -> f c</p><div class="doc"><p>Lift a binary function to actions. </p></div></div><div class="top"><p class="src"><a name="v:liftA3" class="def">liftA3</a> :: <a href="Control-Applicative.html#t:Applicative">Applicative</a> f => (a -> b -> c -> d) -> f a -> f b -> f c -> f d</p><div class="doc"><p>Lift a ternary function to actions. </p></div></div><div class="top"><p class="src"><a name="v:optional" class="def">optional</a> :: <a href="Control-Applicative.html#t:Alternative">Alternative</a> f => f a -> f (<a href="Data-Maybe.html#t:Maybe">Maybe</a> a)</p><div class="doc"><p>One or none. </p></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.11.0</p></div></body></html>