Of course it is not possible! Take a simple composition of reader and Maybe functors for an example: miszero :: (b -> Maybe a) -> Bool I'm pretty sure (b -> Maybe a) for a is a MonadPlus, but you can't implement miszero for it. Arseniy. On 3 December 2011 16:55, edgar klerks <edgar.klerks@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:
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@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe