<!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.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">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 -> a -> a</li><li><a href="#v:mconcat">mconcat</a> :: [a] -> a</li></ul></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 -> 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 -> a -> a</p><div class="doc"><p>An associative operation </p></div><p class="src"><a name="v:mconcat" class="def">mconcat</a> :: [a] -> 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"> </td></tr><tr><td class="src"><a href="Data-Monoid.html#t:Monoid">Monoid</a> ()</td><td class="doc empty"> </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"> </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"> </td></tr><tr><td class="src"><a href="Data-Monoid.html#t:Monoid">Monoid</a> <a href="System-Event.html#t:Event">Event</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Data-Monoid.html#t:Monoid">Monoid</a> [a]</td><td class="doc empty"> </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> (<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>: "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 S</code>." Since there is no "Semigroup" 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"> </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"> </td></tr><tr><td class="src"><a href="Prelude.html#t:Num">Num</a> a => <a href="Data-Monoid.html#t:Monoid">Monoid</a> (<a href="Data-Monoid.html#t:Product">Product</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Prelude.html#t:Num">Num</a> a => <a href="Data-Monoid.html#t:Monoid">Monoid</a> (<a href="Data-Monoid.html#t:Sum">Sum</a> a)</td><td class="doc empty"> </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"> </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> (<a href="Data-Monoid.html#t:Dual">Dual</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Data-Monoid.html#t:Monoid">Monoid</a> b => <a href="Data-Monoid.html#t:Monoid">Monoid</a> (a -> b)</td><td class="doc empty"> </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> (a, b)</td><td class="doc empty"> </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> (a, b, c)</td><td class="doc empty"> </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> (a, b, c, d)</td><td class="doc empty"> </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) => <a href="Data-Monoid.html#t:Monoid">Monoid</a> (a, b, c, d, e)</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: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"> </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"> </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 => <a href="Prelude.html#t:Bounded">Bounded</a> (<a href="Data-Monoid.html#t:Dual">Dual</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Data-Eq.html#t:Eq">Eq</a> a => <a href="Data-Eq.html#t:Eq">Eq</a> (<a href="Data-Monoid.html#t:Dual">Dual</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Data-Ord.html#t:Ord">Ord</a> a => <a href="Data-Ord.html#t:Ord">Ord</a> (<a href="Data-Monoid.html#t:Dual">Dual</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> a => <a href="Text-Read.html#t:Read">Read</a> (<a href="Data-Monoid.html#t:Dual">Dual</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Show.html#t:Show">Show</a> a => <a href="Text-Show.html#t:Show">Show</a> (<a href="Data-Monoid.html#t:Dual">Dual</a> a)</td><td class="doc empty"> </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> (<a href="Data-Monoid.html#t:Dual">Dual</a> a)</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: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"> </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 -> 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: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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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 => <a href="Prelude.html#t:Bounded">Bounded</a> (<a href="Data-Monoid.html#t:Sum">Sum</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Data-Eq.html#t:Eq">Eq</a> a => <a href="Data-Eq.html#t:Eq">Eq</a> (<a href="Data-Monoid.html#t:Sum">Sum</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Data-Ord.html#t:Ord">Ord</a> a => <a href="Data-Ord.html#t:Ord">Ord</a> (<a href="Data-Monoid.html#t:Sum">Sum</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> a => <a href="Text-Read.html#t:Read">Read</a> (<a href="Data-Monoid.html#t:Sum">Sum</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Show.html#t:Show">Show</a> a => <a href="Text-Show.html#t:Show">Show</a> (<a href="Data-Monoid.html#t:Sum">Sum</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Prelude.html#t:Num">Num</a> a => <a href="Data-Monoid.html#t:Monoid">Monoid</a> (<a href="Data-Monoid.html#t:Sum">Sum</a> a)</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: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"> </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"> </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 => <a href="Prelude.html#t:Bounded">Bounded</a> (<a href="Data-Monoid.html#t:Product">Product</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Data-Eq.html#t:Eq">Eq</a> a => <a href="Data-Eq.html#t:Eq">Eq</a> (<a href="Data-Monoid.html#t:Product">Product</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Data-Ord.html#t:Ord">Ord</a> a => <a href="Data-Ord.html#t:Ord">Ord</a> (<a href="Data-Monoid.html#t:Product">Product</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> a => <a href="Text-Read.html#t:Read">Read</a> (<a href="Data-Monoid.html#t:Product">Product</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Show.html#t:Show">Show</a> a => <a href="Text-Show.html#t:Show">Show</a> (<a href="Data-Monoid.html#t:Product">Product</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Prelude.html#t:Num">Num</a> a => <a href="Data-Monoid.html#t:Monoid">Monoid</a> (<a href="Data-Monoid.html#t:Product">Product</a> a)</td><td class="doc empty"> </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 => (a -> Bool) -> t a -> Maybe a findLast pred = getLast . foldMap (x -> 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) => (Maybe a -> f (Maybe a)) -> k -> Map k a -> f (Map k a) instance Monoid a => Applicative ((,) a) -- from Control.Applicative </pre><pre> insertLookupWithKey :: Ord k => (k -> v -> v -> v) -> k -> v -> Map k v -> (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"> </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"> </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 => <a href="Data-Eq.html#t:Eq">Eq</a> (<a href="Data-Monoid.html#t:First">First</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Data-Ord.html#t:Ord">Ord</a> a => <a href="Data-Ord.html#t:Ord">Ord</a> (<a href="Data-Monoid.html#t:First">First</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> a => <a href="Text-Read.html#t:Read">Read</a> (<a href="Data-Monoid.html#t:First">First</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Show.html#t:Show">Show</a> a => <a href="Text-Show.html#t:Show">Show</a> (<a href="Data-Monoid.html#t:First">First</a> a)</td><td class="doc empty"> </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"> </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"> </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"> </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 => <a href="Data-Eq.html#t:Eq">Eq</a> (<a href="Data-Monoid.html#t:Last">Last</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Data-Ord.html#t:Ord">Ord</a> a => <a href="Data-Ord.html#t:Ord">Ord</a> (<a href="Data-Monoid.html#t:Last">Last</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Read.html#t:Read">Read</a> a => <a href="Text-Read.html#t:Read">Read</a> (<a href="Data-Monoid.html#t:Last">Last</a> a)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Text-Show.html#t:Show">Show</a> a => <a href="Text-Show.html#t:Show">Show</a> (<a href="Data-Monoid.html#t:Last">Last</a> a)</td><td class="doc empty"> </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"> </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.9.2</p></div></body></html>