
Am Dienstag, 9. September 2008 22:19 schrieb Rafal Kolanski:
Greetings,
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 user's guide. 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 anything"?
That depends on the situation. In monadic code, often you can use 'when' from Control.Monad: 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.