On Mon, Feb 16, 2009 at 8:13 PM, wren ng thornton <span dir="ltr">&lt;<a href="mailto:wren@freegeek.org">wren@freegeek.org</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="Ih2E3d">Isaac Dupree wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Natural numbers under min don&#39;t form a monoid, only naturals under max do (so you can have a zero element)<br>
</blockquote>
<br></div>
Though, FWIW, you can use Nat+1 with the extra value standing for Infinity as the identity of min (newtype Min = Maybe Nat).</blockquote><div><br>Indeed, as well as you can use lazy naturals with infinity as the unit:<br>
<br>data Nat = Zero | Succ Nat<br>infinity = Succ infinity<br>min Zero _ = Zero<br>min _ Zero = Zero<br>min (Succ x) (Succ y) = Succ (min x y)<br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
<br>
I bring this up mainly because it can be helpful to explain how we can take the &quot;almost monoid&quot; of min@Nat and monoidize it. Showing how this is similar to and different from max@Nat is enlightening. Showing the min monoid on negative naturals with 0 as the identity, and no need for the &quot;special&quot; +1 value, would help drive the point home. (Also, the min/max duality is mirrored in intersection/union on sets where we need to introduce either the empty set (usually trivial) or the universal set (usually overlooked).)<br>

<br>
Or maybe that would be better explained in a reference rather than the main text.<br>
<br>
-- <br>
Live well,<br><font color="#888888">
~wren</font><div><div></div><div class="Wj3C7c"><br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</div></div></blockquote></div><br>