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