 
            
            
            
            
                26 Mar
                
                    2012
                
            
            
                26 Mar
                
                '12
                
            
            
            
        
    
                3:23 p.m.
            
        On 26 March 2012 21:11, Jeff Shaw 
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
can f x = f x /= mzero