<!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.3.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></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: it provides pure expressions and sequencing, but no binding. (Technically, a strong lax monoidal functor.) 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><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 recent parsing work by Doaitse Swierstra. </p><p>This class is also useful with instances of the <code>Data.Traversable.Traversable</code> class. </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. </p><p>Instances should satisfy 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><dt><em>ignore left value</em></dt><dd> <code>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</code> </dd><dt><em>ignore right value</em></dt><dd> <code>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</code> </dd></dl><p>The <code><a href="Control-Monad.html#t:Functor">Functor</a></code> instance should 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>, define <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>. </p><p>Minimal complete definition: <code><a href="Control-Applicative.html#v:pure">pure</a></code> and <code><a href="Control-Applicative.html#v:-60--42--62-"><*></a></code>. </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-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><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.9.2</p></div></body></html>