[GHC] #5813: Offer a compiler warning for failable pattern matches
GHC
cvs-ghc at haskell.org
Tue Jan 24 11:30:21 CET 2012
#5813: Offer a compiler warning for failable pattern matches
------------------------------+---------------------------------------------
Reporter: snoyberg | Owner:
Type: bug | Status: new
Priority: normal | Component: Compiler
Version: 7.2.2 | Keywords:
Os: Unknown/Multiple | Architecture: Unknown/Multiple
Failure: None/Unknown | Testcase:
Blockedby: | Blocking:
Related: |
------------------------------+---------------------------------------------
This started off with a mailing list discussion: [http://www.mail-
archive.com/haskell-cafe at haskell.org/msg96517.html]. The problem is that
the following code produces no compile-time warning and results in a
runtime error:
{{{
data MyType = Foo | Bar
deriving Show
test :: Monad m => m MyType -> m ()
test myType = do
Foo <- myType
return ()
main :: IO ()
main = test $ return Bar
}}}
This is in contrast to the rest of pattern matching, which would warn
about unmatched patterns, e.g.:
{{{
data MyType = Foo | Bar
deriving Show
test :: Monad m => m MyType -> m ()
test myType = do
x <- myType
case x of
Foo -> return ()
main :: IO ()
main = test $ return Bar
}}}
I understand that this style of code may be very useful in some
circumstances when paired with a Monad providing a sensible fail
implementation, and is especially used in list comprehensions. However,
this is allowing an easily catchable static error to slip through our
fingers.
I recommend we add a new compiler warning to catch incomplete patterns in
do-notation binding. I believe this warning should not apply to list
comprehensions. Ideally, this warning would be turned on by -Wall.
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/5813>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the Glasgow-haskell-bugs
mailing list