On Sat, Dec 3, 2011 at 10:55 AM, edgar klerks <edgar.kle...@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@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe > _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe