Sophie

Sophie

distrib > Mageia > 5 > i586 > media > core-release > by-pkgid > 6e204a966e8c42d976f99a1700ce5f20 > files > 2253

ghc-7.4.2-4.mga5.i586.rpm

<!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>Data.Monoid</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_Data-Monoid.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">Data.Monoid</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">Monoid typeclass
</a></li><li><a href="#g:2">Bool wrappers
</a></li><li><a href="#g:3">Num wrappers
</a></li><li><a href="#g:4">Maybe wrappers
</a></li></ul></div><div id="description"><p class="caption">Description</p><div class="doc"><p>A class for monoids (types with an associative binary operation that
 has an identity) with various general-purpose instances.
</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="#t:Monoid">Monoid</a> a  <span class="keyword">where</span><ul class="subs"><li><a href="#v:mempty">mempty</a> :: a</li><li><a href="#v:mappend">mappend</a> :: a -&gt; a -&gt; a</li><li><a href="#v:mconcat">mconcat</a> :: [a] -&gt; a</li></ul></li><li class="src short"><a href="#v:-60--62-">(&lt;&gt;)</a> :: <a href="Data-Monoid.html#t:Monoid">Monoid</a> m =&gt; m -&gt; m -&gt; m</li><li class="src short"><span class="keyword">newtype</span>  <a href="#t:Dual">Dual</a> a = <a href="#v:Dual">Dual</a> {<ul class="subs"><li><a href="#v:getDual">getDual</a> :: a</li></ul>}</li><li class="src short"><span class="keyword">newtype</span>  <a href="#t:Endo">Endo</a> a = <a href="#v:Endo">Endo</a> {<ul class="subs"><li><a href="#v:appEndo">appEndo</a> :: a -&gt; a</li></ul>}</li><li class="src short"><span class="keyword">newtype</span>  <a href="#t:All">All</a>  = <a href="#v:All">All</a> {<ul class="subs"><li><a href="#v:getAll">getAll</a> :: <a href="Data-Bool.html#t:Bool">Bool</a></li></ul>}</li><li class="src short"><span class="keyword">newtype</span>  <a href="#t:Any">Any</a>  = <a href="#v:Any">Any</a> {<ul class="subs"><li><a href="#v:getAny">getAny</a> :: <a href="Data-Bool.html#t:Bool">Bool</a></li></ul>}</li><li class="src short"><span class="keyword">newtype</span>  <a href="#t:Sum">Sum</a> a = <a href="#v:Sum">Sum</a> {<ul class="subs"><li><a href="#v:getSum">getSum</a> :: a</li></ul>}</li><li class="src short"><span class="keyword">newtype</span>  <a href="#t:Product">Product</a> a = <a href="#v:Product">Product</a> {<ul class="subs"><li><a href="#v:getProduct">getProduct</a> :: a</li></ul>}</li><li class="src short"><span class="keyword">newtype</span>  <a href="#t:First">First</a> a = <a href="#v:First">First</a> {<ul class="subs"><li><a href="#v:getFirst">getFirst</a> :: <a href="Data-Maybe.html#t:Maybe">Maybe</a> a</li></ul>}</li><li class="src short"><span class="keyword">newtype</span>  <a href="#t:Last">Last</a> a = <a href="#v:Last">Last</a> {<ul class="subs"><li><a href="#v:getLast">getLast</a> :: <a href="Data-Maybe.html#t:Maybe">Maybe</a> a</li></ul>}</li></ul></div><div id="interface"><h1 id="g:1">Monoid typeclass
</h1><div class="top"><p class="src"><span class="keyword">class</span>  <a name="t:Monoid" class="def">Monoid</a> a  <span class="keyword">where</span></p><div class="doc"><p>The class of monoids (types with an associative binary operation that
 has an identity).  Instances should satisfy the following laws:
</p><ul><li><pre>mappend mempty x = x</pre></li><li><pre>mappend x mempty = x</pre></li><li><pre>mappend x (mappend y z) = mappend (mappend x y) z</pre></li><li><pre>mconcat = <code><a href="Data-List.html#v:foldr">foldr</a></code> mappend mempty</pre></li></ul><p>The method names refer to the monoid of lists under concatenation,
 but there are many other instances.
</p><p>Minimal complete definition: <code><a href="Data-Monoid.html#v:mempty">mempty</a></code> and <code><a href="Data-Monoid.html#v:mappend">mappend</a></code>.
</p><p>Some types can be viewed as a monoid in more than one way,
 e.g. both addition and multiplication on numbers.
 In such cases we often define <code>newtype</code>s and make those instances
 of <code><a href="Data-Monoid.html#t:Monoid">Monoid</a></code>, e.g. <code><a href="Data-Monoid.html#t:Sum">Sum</a></code> and <code><a href="Data-Monoid.html#t:Product">Product</a></code>.
</p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:mempty" class="def">mempty</a> :: a</p><div class="doc"><p>Identity of <code><a href="Data-Monoid.html#v:mappend">mappend</a></code>
</p></div><p class="src"><a name="v:mappend" class="def">mappend</a> :: a -&gt; a -&gt; a</p><div class="doc"><p>An associative operation
</p></div><p class="src"><a name="v:mconcat" class="def">mconcat</a> :: [a] -&gt; a</p><div class="doc"><p>Fold a list using the monoid.
 For most types, the default definition for <code><a href="Data-Monoid.html#v:mconcat">mconcat</a></code> will be
 used, but the function is included in the class definition so
 that an optimized version can be provided for specific types.
</p></div></div><div class="subs instances"><p id="control.i:Monoid" class="caption collapser" onclick="toggleSection('i:Monoid')">Instances</p><div id="section.i:Monoid" class="show"><table><tr><td class="src"><a href="Data-Monoid.html#t:Monoid">Monoid</a> <a href="Data-Ord.html#t:Ordering">Ordering</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Data-Monoid.html#t:Monoid">Monoid</a> ()</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Data-Monoid.html#t:Monoid">Monoid</a> <a href="Data-Monoid.html#t:Any">Any</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Data-Monoid.html#t:Monoid">Monoid</a> <a href="Data-Monoid.html#t:All">All</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Data-Monoid.html#t:Monoid">Monoid</a> <a href="GHC-Event.html#t:Event">Event</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Data-Monoid.html#t:Monoid">Monoid</a> [a]</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Data-Monoid.html#t:Monoid">Monoid</a> a =&gt; <a href="Data-Monoid.html#t:Monoid">Monoid</a> (<a href="Data-Maybe.html#t:Maybe">Maybe</a> a)</td><td class="doc"><p>Lift a semigroup into <code><a href="Data-Maybe.html#t:Maybe">Maybe</a></code> forming a <code><a href="Data-Monoid.html#t:Monoid">Monoid</a></code> according to
 <a href="http://en.wikipedia.org/wiki/Monoid">http://en.wikipedia.org/wiki/Monoid</a>: &quot;Any semigroup <code>S</code> may be
 turned into a monoid simply by adjoining an element <code>e</code> not in <code>S</code>
 and defining <code>e*e = e</code> and <code>e*s = s = s*e</code> for all <code>s &#8712; S</code>.&quot; Since
 there is no &quot;Semigroup&quot; typeclass providing just <code><a href="Data-Monoid.html#v:mappend">mappend</a></code>, we
 use <code><a href="Data-Monoid.html#t:Monoid">Monoid</a></code> instead.
</p></td></tr><tr><td class="src"><a href="Data-Monoid.html#t:Monoid">Monoid</a> (<a href="Data-Monoid.html#t:Last">Last</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Data-Monoid.html#t:Monoid">Monoid</a> (<a href="Data-Monoid.html#t:First">First</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Prelude.html#t:Num">Num</a> a =&gt; <a href="Data-Monoid.html#t:Monoid">Monoid</a> (<a href="Data-Monoid.html#t:Product">Product</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Prelude.html#t:Num">Num</a> a =&gt; <a href="Data-Monoid.html#t:Monoid">Monoid</a> (<a href="Data-Monoid.html#t:Sum">Sum</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Data-Monoid.html#t:Monoid">Monoid</a> (<a href="Data-Monoid.html#t:Endo">Endo</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Data-Monoid.html#t:Monoid">Monoid</a> a =&gt; <a href="Data-Monoid.html#t:Monoid">Monoid</a> (<a href="Data-Monoid.html#t:Dual">Dual</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Data-Monoid.html#t:Monoid">Monoid</a> b =&gt; <a href="Data-Monoid.html#t:Monoid">Monoid</a> (a -&gt; b)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src">(<a href="Data-Monoid.html#t:Monoid">Monoid</a> a, <a href="Data-Monoid.html#t:Monoid">Monoid</a> b) =&gt; <a href="Data-Monoid.html#t:Monoid">Monoid</a> (a, b)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src">(<a href="Data-Monoid.html#t:Monoid">Monoid</a> a, <a href="Data-Monoid.html#t:Monoid">Monoid</a> b, <a href="Data-Monoid.html#t:Monoid">Monoid</a> c) =&gt; <a href="Data-Monoid.html#t:Monoid">Monoid</a> (a, b, c)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src">(<a href="Data-Monoid.html#t:Monoid">Monoid</a> a, <a href="Data-Monoid.html#t:Monoid">Monoid</a> b, <a href="Data-Monoid.html#t:Monoid">Monoid</a> c, <a href="Data-Monoid.html#t:Monoid">Monoid</a> d) =&gt; <a href="Data-Monoid.html#t:Monoid">Monoid</a> (a, b, c, d)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src">(<a href="Data-Monoid.html#t:Monoid">Monoid</a> a, <a href="Data-Monoid.html#t:Monoid">Monoid</a> b, <a href="Data-Monoid.html#t:Monoid">Monoid</a> c, <a href="Data-Monoid.html#t:Monoid">Monoid</a> d, <a href="Data-Monoid.html#t:Monoid">Monoid</a> e) =&gt; <a href="Data-Monoid.html#t:Monoid">Monoid</a> (a, b, c, d, e)</td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:-60--62-" class="def">(&lt;&gt;)</a> :: <a href="Data-Monoid.html#t:Monoid">Monoid</a> m =&gt; m -&gt; m -&gt; m</p><div class="doc"><p>An infix synonym for <code><a href="Data-Monoid.html#v:mappend">mappend</a></code>.
</p></div></div><div class="top"><p class="src"><span class="keyword">newtype</span>  <a name="t:Dual" class="def">Dual</a> a </p><div class="doc"><p>The dual of a monoid, obtained by swapping the arguments of <code><a href="Data-Monoid.html#v:mappend">mappend</a></code>.
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:Dual" class="def">Dual</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:getDual" class="def">getDual</a> :: a</dt><dd class="doc empty">&nbsp;</dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:Dual" class="caption collapser" onclick="toggleSection('i:Dual')">Instances</p><div id="section.i:Dual" class="show"><table><tr><td class="src"><a href="Prelude.html#t:Bounded">Bounded</a> a =&gt; <a href="Prelude.html#t:Bounded">Bounded</a> (<a href="Data-Monoid.html#t:Dual">Dual</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Data-Eq.html#t:Eq">Eq</a> a =&gt; <a href="Data-Eq.html#t:Eq">Eq</a> (<a href="Data-Monoid.html#t:Dual">Dual</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Data-Ord.html#t:Ord">Ord</a> a =&gt; <a href="Data-Ord.html#t:Ord">Ord</a> (<a href="Data-Monoid.html#t:Dual">Dual</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> a =&gt; <a href="Text-Read.html#t:Read">Read</a> (<a href="Data-Monoid.html#t:Dual">Dual</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Text-Show.html#t:Show">Show</a> a =&gt; <a href="Text-Show.html#t:Show">Show</a> (<a href="Data-Monoid.html#t:Dual">Dual</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Data-Monoid.html#t:Monoid">Monoid</a> a =&gt; <a href="Data-Monoid.html#t:Monoid">Monoid</a> (<a href="Data-Monoid.html#t:Dual">Dual</a> a)</td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">newtype</span>  <a name="t:Endo" class="def">Endo</a> a </p><div class="doc"><p>The monoid of endomorphisms under composition.
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:Endo" class="def">Endo</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:appEndo" class="def">appEndo</a> :: a -&gt; a</dt><dd class="doc empty">&nbsp;</dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:Endo" class="caption collapser" onclick="toggleSection('i:Endo')">Instances</p><div id="section.i:Endo" class="show"><table><tr><td class="src"><a href="Data-Monoid.html#t:Monoid">Monoid</a> (<a href="Data-Monoid.html#t:Endo">Endo</a> a)</td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><h1 id="g:2">Bool wrappers
</h1><div class="top"><p class="src"><span class="keyword">newtype</span>  <a name="t:All" class="def">All</a>  </p><div class="doc"><p>Boolean monoid under conjunction.
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:All" class="def">All</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:getAll" class="def">getAll</a> :: <a href="Data-Bool.html#t:Bool">Bool</a></dt><dd class="doc empty">&nbsp;</dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:All" class="caption collapser" onclick="toggleSection('i:All')">Instances</p><div id="section.i:All" class="show"><table><tr><td class="src"><a href="Prelude.html#t:Bounded">Bounded</a> <a href="Data-Monoid.html#t:All">All</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Data-Eq.html#t:Eq">Eq</a> <a href="Data-Monoid.html#t:All">All</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Data-Ord.html#t:Ord">Ord</a> <a href="Data-Monoid.html#t:All">All</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Data-Monoid.html#t:All">All</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Text-Show.html#t:Show">Show</a> <a href="Data-Monoid.html#t:All">All</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Data-Monoid.html#t:Monoid">Monoid</a> <a href="Data-Monoid.html#t:All">All</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">newtype</span>  <a name="t:Any" class="def">Any</a>  </p><div class="doc"><p>Boolean monoid under disjunction.
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:Any" class="def">Any</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:getAny" class="def">getAny</a> :: <a href="Data-Bool.html#t:Bool">Bool</a></dt><dd class="doc empty">&nbsp;</dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:Any" class="caption collapser" onclick="toggleSection('i:Any')">Instances</p><div id="section.i:Any" class="show"><table><tr><td class="src"><a href="Prelude.html#t:Bounded">Bounded</a> <a href="Data-Monoid.html#t:Any">Any</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Data-Eq.html#t:Eq">Eq</a> <a href="Data-Monoid.html#t:Any">Any</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Data-Ord.html#t:Ord">Ord</a> <a href="Data-Monoid.html#t:Any">Any</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> <a href="Data-Monoid.html#t:Any">Any</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Text-Show.html#t:Show">Show</a> <a href="Data-Monoid.html#t:Any">Any</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Data-Monoid.html#t:Monoid">Monoid</a> <a href="Data-Monoid.html#t:Any">Any</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><h1 id="g:3">Num wrappers
</h1><div class="top"><p class="src"><span class="keyword">newtype</span>  <a name="t:Sum" class="def">Sum</a> a </p><div class="doc"><p>Monoid under addition.
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:Sum" class="def">Sum</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:getSum" class="def">getSum</a> :: a</dt><dd class="doc empty">&nbsp;</dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:Sum" class="caption collapser" onclick="toggleSection('i:Sum')">Instances</p><div id="section.i:Sum" class="show"><table><tr><td class="src"><a href="Prelude.html#t:Bounded">Bounded</a> a =&gt; <a href="Prelude.html#t:Bounded">Bounded</a> (<a href="Data-Monoid.html#t:Sum">Sum</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Data-Eq.html#t:Eq">Eq</a> a =&gt; <a href="Data-Eq.html#t:Eq">Eq</a> (<a href="Data-Monoid.html#t:Sum">Sum</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Data-Ord.html#t:Ord">Ord</a> a =&gt; <a href="Data-Ord.html#t:Ord">Ord</a> (<a href="Data-Monoid.html#t:Sum">Sum</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> a =&gt; <a href="Text-Read.html#t:Read">Read</a> (<a href="Data-Monoid.html#t:Sum">Sum</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Text-Show.html#t:Show">Show</a> a =&gt; <a href="Text-Show.html#t:Show">Show</a> (<a href="Data-Monoid.html#t:Sum">Sum</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Prelude.html#t:Num">Num</a> a =&gt; <a href="Data-Monoid.html#t:Monoid">Monoid</a> (<a href="Data-Monoid.html#t:Sum">Sum</a> a)</td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">newtype</span>  <a name="t:Product" class="def">Product</a> a </p><div class="doc"><p>Monoid under multiplication.
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:Product" class="def">Product</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:getProduct" class="def">getProduct</a> :: a</dt><dd class="doc empty">&nbsp;</dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:Product" class="caption collapser" onclick="toggleSection('i:Product')">Instances</p><div id="section.i:Product" class="show"><table><tr><td class="src"><a href="Prelude.html#t:Bounded">Bounded</a> a =&gt; <a href="Prelude.html#t:Bounded">Bounded</a> (<a href="Data-Monoid.html#t:Product">Product</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Data-Eq.html#t:Eq">Eq</a> a =&gt; <a href="Data-Eq.html#t:Eq">Eq</a> (<a href="Data-Monoid.html#t:Product">Product</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Data-Ord.html#t:Ord">Ord</a> a =&gt; <a href="Data-Ord.html#t:Ord">Ord</a> (<a href="Data-Monoid.html#t:Product">Product</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> a =&gt; <a href="Text-Read.html#t:Read">Read</a> (<a href="Data-Monoid.html#t:Product">Product</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Text-Show.html#t:Show">Show</a> a =&gt; <a href="Text-Show.html#t:Show">Show</a> (<a href="Data-Monoid.html#t:Product">Product</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Prelude.html#t:Num">Num</a> a =&gt; <a href="Data-Monoid.html#t:Monoid">Monoid</a> (<a href="Data-Monoid.html#t:Product">Product</a> a)</td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><h1 id="g:4">Maybe wrappers
</h1><div class="doc"><p>To implement <code>find</code> or <code>findLast</code> on any <code>Foldable</code>:
</p><pre>
 findLast :: Foldable t =&gt; (a -&gt; Bool) -&gt; t a -&gt; Maybe a
 findLast pred = getLast . foldMap (x -&gt; if pred x
                                            then Last (Just x)
                                            else Last Nothing)
</pre><p>Much of Data.Map's interface can be implemented with
 Data.Map.alter. Some of the rest can be implemented with a new
 <code>alterA</code> function and either <code><a href="Data-Monoid.html#t:First">First</a></code> or <code><a href="Data-Monoid.html#t:Last">Last</a></code>:
</p><pre> alterA :: (Applicative f, Ord k) =&gt;
           (Maybe a -&gt; f (Maybe a)) -&gt; k -&gt; Map k a -&gt; f (Map k a)

 instance Monoid a =&gt; Applicative ((,) a)  -- from Control.Applicative
</pre><pre>
 insertLookupWithKey :: Ord k =&gt; (k -&gt; v -&gt; v -&gt; v) -&gt; k -&gt; v
                     -&gt; Map k v -&gt; (Maybe v, Map k v)
 insertLookupWithKey combine key value =
   Arrow.first getFirst . alterA doChange key
   where
   doChange Nothing = (First Nothing, Just value)
   doChange (Just oldValue) =
     (First (Just oldValue),
      Just (combine key value oldValue))
</pre></div><div class="top"><p class="src"><span class="keyword">newtype</span>  <a name="t:First" class="def">First</a> a </p><div class="doc"><p>Maybe monoid returning the leftmost non-Nothing value.
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:First" class="def">First</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:getFirst" class="def">getFirst</a> :: <a href="Data-Maybe.html#t:Maybe">Maybe</a> a</dt><dd class="doc empty">&nbsp;</dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:First" class="caption collapser" onclick="toggleSection('i:First')">Instances</p><div id="section.i:First" class="show"><table><tr><td class="src"><a href="Data-Eq.html#t:Eq">Eq</a> a =&gt; <a href="Data-Eq.html#t:Eq">Eq</a> (<a href="Data-Monoid.html#t:First">First</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Data-Ord.html#t:Ord">Ord</a> a =&gt; <a href="Data-Ord.html#t:Ord">Ord</a> (<a href="Data-Monoid.html#t:First">First</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> a =&gt; <a href="Text-Read.html#t:Read">Read</a> (<a href="Data-Monoid.html#t:First">First</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Text-Show.html#t:Show">Show</a> a =&gt; <a href="Text-Show.html#t:Show">Show</a> (<a href="Data-Monoid.html#t:First">First</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Data-Monoid.html#t:Monoid">Monoid</a> (<a href="Data-Monoid.html#t:First">First</a> a)</td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">newtype</span>  <a name="t:Last" class="def">Last</a> a </p><div class="doc"><p>Maybe monoid returning the rightmost non-Nothing value.
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:Last" class="def">Last</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:getLast" class="def">getLast</a> :: <a href="Data-Maybe.html#t:Maybe">Maybe</a> a</dt><dd class="doc empty">&nbsp;</dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:Last" class="caption collapser" onclick="toggleSection('i:Last')">Instances</p><div id="section.i:Last" class="show"><table><tr><td class="src"><a href="Data-Eq.html#t:Eq">Eq</a> a =&gt; <a href="Data-Eq.html#t:Eq">Eq</a> (<a href="Data-Monoid.html#t:Last">Last</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Data-Ord.html#t:Ord">Ord</a> a =&gt; <a href="Data-Ord.html#t:Ord">Ord</a> (<a href="Data-Monoid.html#t:Last">Last</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> a =&gt; <a href="Text-Read.html#t:Read">Read</a> (<a href="Data-Monoid.html#t:Last">Last</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Text-Show.html#t:Show">Show</a> a =&gt; <a href="Text-Show.html#t:Show">Show</a> (<a href="Data-Monoid.html#t:Last">Last</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Data-Monoid.html#t:Monoid">Monoid</a> (<a href="Data-Monoid.html#t:Last">Last</a> a)</td><td class="doc empty">&nbsp;</td></tr></table></div></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>