<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Jan 29, 2014 at 4:25 AM, Alvaro J. Genial <span dir="ltr"><<a href="mailto:genial@alva.ro" target="_blank">genial@alva.ro</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div>1. Is there a more general version of `null`? (e.g. for a Monad, Functor, Applicative, Traversable or the like.) The closest I can come up with is, in decreasing clunkiness:<br>

</div><div><br></div><div>

    zero :: (MonadPlus m, Eq (m a)) => m a -> Bool</div><div>    zero = m == mzero</div><div><div><br>    zero :: (Alternative f, Eq (f a)) => f a -> Bool</div><div>    zero = m == empty</div></div><div>

<br></div><div>    zero :: (Monoid m, Eq m) => m -> Bool</div><div>    zero = m == mempty<br></div><div><br></div><div>Though requiring Eq seems ugly and unnecessary, in theory.</div><div><br></div></div></blockquote>

<div><br></div><div>You can try out onull[1], which will work on any MonoFoldable. That allows it to work with classical Foldable instances (like a list or Maybe), but also monomorphic containers like ByteString or Text.</div>

<div><br></div><div>[1] <a href="http://hackage.haskell.org/package/mono-traversable-0.2.0.0/docs/Data-MonoTraversable.html#v:onull">http://hackage.haskell.org/package/mono-traversable-0.2.0.0/docs/Data-MonoTraversable.html#v:onull</a></div>

<div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div></div><div>2. In that vein, is there an existing function for "a value or a default if it's zero"? E.g.:</div>



<div><br></div><div>    orElse :: (Monoid m) => m -> m -> m</div><div>    a `orElse` b = if zero a then b else a</div><div><div><br></div></div><div>Thank you,</div><div><br></div><div><div dir="ltr"><div style="font-family:arial;font-size:small">



Alvaro</div><div style="font-family:arial;font-size:small"><a href="http://alva.ro" target="_blank">http://alva.ro</a></div></div></div>
</div>
<br>_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">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>
<br></blockquote></div><br></div></div>