Ah, indeed so.  Thank you for reporting this.   It turned out to be
caused by a function written like this
        f (C a) = ...
        f (D a b) = ...
        f other = False

The data type changed, and we should have added a new case to the
function, but the default case caught it, so there was no indication.
It just shows: don't use default cases! 

The good news is that I managed to fix it by eliminating 'f' altogether
(it was called 'failureFreePat' in fact).  So GHC is 30 lines shorter
thanks to you.   

Simon

| -----Original Message-----
| From: Andrew J Bromage [mailto:[EMAIL PROTECTED]]
| Sent: 21 November 2002 00:45
| To: [EMAIL PROTECTED]
| Subject: Bug in do expressions
| 
| G'day all.
| 
| In a recent GHC checkout, the following program:
| 
|     module Main(main) where
| 
|     import Maybe
|     import Control.Monad
| 
|     test :: (MonadPlus m) => [a] -> m Bool
|     test xs
|       =   do
|             (_:_) <- return xs
|             return True
|         `mplus`
|           do
|             return False
| 
|     main :: IO ()
|     main
|       = do  let x = fromJust (test [])
|             putStrLn (show x)
| 
| causes a run-time exception:
| 
|      *** Exception: GhcBug.hs:9: Non-exhaustive patterns in 'do'
expression
| 
| Version 5.04 correctly prints "False".
| 
| Cheers,
| Andrew Bromage
| _______________________________________________
| Glasgow-haskell-bugs mailing list
| [EMAIL PROTECTED]
| http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs
_______________________________________________
Glasgow-haskell-bugs mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to