<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 class="">    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>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">http://alva.ro</a></div></div></div>
</div>