[Haskell-cafe] Is there a generic way to detect "mzero"?
shawjef3 at msu.edu
Mon Mar 26 21:11:41 CEST 2012
> can :: (MonadPlus m) => (a -> m b) -> a -> Bool
> can f x = case f x of
> mzero -> False
> _ -> True
> I got a warning:
> 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
More information about the Haskell-Cafe