[Haskell-cafe] ismzero operator possible without equal constraint

Antoine Latter aslatter at gmail.com
Sat Dec 3 21:55:12 CET 2011


On Sat, Dec 3, 2011 at 10:55 AM, edgar klerks <edgar.klerks at gmail.com> wrote:
> Hi list,
>
> I am using MonadSplit
> (from http://www.haskell.org/haskellwiki/New_monads/MonadSplit )  for a
> project and now I want to make a library out of it. This seems to be
> straightforward, but I got stuck when I tried to move miszero out of the
> class:
>
> miszero :: m a -> Bool
>
> It tests if the provided monad instance is empty. My naive attempt was:
>

You can write:

miszero :: MonadPlus m => m a -> m Bool
miszero m = (m >> return False) <|> return True

but that will invoke any monadic effects as well as determining the
nature of the value, which may not be what you want.

Antoine

> miszero :: (Eq (m a), MonadPlus m) => m a -> Bool
> miszero =  ( == mzero )
>
> This works, but not correctly. It adds an Eq constraint that is unneeded. I
> would prefer to have something like:
>
> miszero :: MonadPlus m => m a -> Bool
>
>
> Because I am not comparing the contents of the monad. I don't even touch it.
>  Is this possible to write?
>
> with kind regards,
>
> Edgar
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>



More information about the Haskell-Cafe mailing list