logo       

TH: calling fail in Q monad gives uninformative error message, and error ca: msg#00036

lang.haskell.glasgow.bugs

Subject: TH: calling fail in Q monad gives uninformative error message, and error causes panic


ghc makes it's own type checker monad TcM an instance of the Quasi class
(which is rather cunning), however this means that if the user calls the
Monad function 'fail' then the internal TcM fail method gets called.
This monad (IOEnv) was never meant to fail (see
ghc/compiler/utils/IOEnv.hs/) so the error message is:

Exception when trying to run compile-time code:
Code: genex_count
Exn: user error (IOEnv failure)

Of course the user code should be using 'report', but if you're using
old code, or code that is generic in the monad it uses then people will
end up calling fail.

Perhaps the thing to do is to wrap splices in an exception handler and
convert 'fail's into a 'report' instead.

The same should probably be done for errors raised in pure code by
calling 'error'. At the moment it gives an overly panicky report
(although at least it passes the user's error message through):

ghc-6.3: panic! (the `impossible' happened, GHC version 6.3):
where clauses & gaurds not yet supprted in function definitions

The error message there is generated by my code (hence the spelling
errors :-) ).

Duncan


<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise