[Haskell-beginners] Non-exhaustive case leads to runtime error?
daniel.is.fischer at web.de
Tue Sep 9 16:37:37 EDT 2008
Am Dienstag, 9. September 2008 22:19 schrieb Rafal Kolanski:
> I just ran into the following situation in an IO do block:
> case msel of Just sel -> do toggleFretArea selectionRef sel
> widgetQueueDraw canvas
> Nothing -> return ()
> except I omitted the last line. I expected the compiler to complain, but
> it silently compiled it, and I got a runtime exception when the program
> ran instead.
> Is this behaviour intentional? Can I get ghc to warn me about it anyway
> (something like -Wall)?
Yes, this is intentional, and yes, ghc can warn you about it, for example if
you use -Wall. There's the more specific -fwarn-incomplete-patterns, too.
For a comprehensive list of eligible warnings, consult section 5.7 of the
Neil Mitchell wrote a tool 'Catch', which is said to be even better at
catching things like that (I've never tried it, so I don't know).
> Two more guiding questions:
> 1. What is a good idiom for "In this case do blah otherwise don't do
That depends on the situation. In monadic code, often you can use 'when' from
when condition action
> 2. Is there a shorter way of writing a no-op in a do block than "return
As far as I know, there isn't.
> Thanks in advance!
> Rafal Kolanski.
More information about the Beginners