Do notation in pattern match [GHC-06446]
When pattern matching, do expressions are not allowed as patterns to be matched against.
Instead, either match on a variable within the do block, or on the value the do block itself evaluates to.
Examples
Do notation in pattern match
When pattern matching, do expressions are not allowed as patterns to be matched against.
Error Message
DoNotationInPattern.hs:4:4: error: [GHC-06446]
do-notation in pattern
|
4 | f (do a; b; c;) = do
| ^^^^^^^^^^
DoNotationInPattern.hs
Before
module DoNotationInPattern where
f :: Monad m => m Int -> m Bool
f (do a; b; c) = do
v <- c
return $ v == 2
After
module DoNotationInPattern where
f :: Monad m => m Int -> m Bool
f m = do
v <- m
return $ v == 2