Jeff, I don't think your code works in general, since it is not guaranteed that x' == mzero is allowed unless (m b) is an instance of Eq. I'm unsure if you are able to test for mzero in general.
Harry On Mon, Mar 26, 2012 at 3:11 PM, Jeff Shaw <shawj...@msu.edu> wrote: > > can :: (MonadPlus m) => (a -> m b) -> a -> Bool >> can f x = case f x of >> mzero -> False >> _ -> True >> >> >> I got a warning: >> >> __testError.hs:31:11: >> Warning: Pattern match(es) are overlapped >> In a case alternative: _ -> ... >> Ok, modules loaded: Main. >> > The problem here is that when you match on "f x", your first match is an > identifier that matches anything at all, and binds it to mzero. I think > what you're looking for is > > > can f x = case f x of > x' | x' == mzero -> False > _ -> True > > Jeff > > ______________________________**_________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/**mailman/listinfo/haskell-cafe<http://www.haskell.org/mailman/listinfo/haskell-cafe> >
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe