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

Reply via email to