[Haskell-cafe] Generalized null / zero

Michael Snoyman michael at snoyman.com
Wed Jan 29 06:46:12 UTC 2014


On Wed, Jan 29, 2014 at 4:25 AM, Alvaro J. Genial <genial at alva.ro> wrote:

> 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:
>
>     zero :: (MonadPlus m, Eq (m a)) => m a -> Bool
>     zero = m == mzero
>
>     zero :: (Alternative f, Eq (f a)) => f a -> Bool
>     zero = m == empty
>
>     zero :: (Monoid m, Eq m) => m -> Bool
>     zero = m == mempty
>
> Though requiring Eq seems ugly and unnecessary, in theory.
>
>
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.

[1]
http://hackage.haskell.org/package/mono-traversable-0.2.0.0/docs/Data-MonoTraversable.html#v:onull


> 2. In that vein, is there an existing function for "a value or a default
> if it's zero"? E.g.:
>
>     orElse :: (Monoid m) => m -> m -> m
>     a `orElse` b = if zero a then b else a
>
> Thank you,
>
> Alvaro
> http://alva.ro
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20140129/1b4f9ae9/attachment.html>


More information about the Haskell-Cafe mailing list