[Haskell-cafe] Is there a generic way to detect "mzero"?

Jeff Shaw 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:
>
> __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



More information about the Haskell-Cafe mailing list