On Sep 29, 2009, at 8:56 AM, Martin Hofmann wrote:
Hi,
The API of Language.Haskell.Interpreter says, that 'runInterpreter'
runInterpreter :: (MonadCatchIO m, Functor m) =>
InterpreterT m a ->
m (Either InterpreterError a)
returns 'Left' in case of errors and 'GhcExceptions from the
underlying
GHC API are caught and rethrown as this'.
What kind of errors do a generate here, why are they not caught by
runInterpreter and how can I catch them? I assumed to get a 'Left
InterpreterError' from the first and an error in MonadCatchIO in the
second.
:m +Language.Haskell.Interpreter
let estr1 = "let lst [a] = a; lst _ = error \"foo\" in lst []"
let estr1 = "let lst [a] = a; in lst []"
runInterpreter (setImportsQ [("Prelude", Nothing)] >> eval estr1 )
Right "*** Exception: foo
runInterpreter ( eval estr2)
Right "*** Exception: <interactive>:1:101-111: Non-exhaustive
patterns in function lst
Thanks a lot
InterpreterErrors are those that prevent your to-be-interpreted code
from "compiling/typechecking". In this case, estr1 is interpreted just
fine; but the interpreted value is an exception. So I think Ritght...
is ok.
You ought to be able to add a Control.Monad.CatchIO.catch clause to
your interpreter to catch this kind of errors, if you want. I just
tried it and failed, though, so this is probably a bug. I'll try to
track it down in more detail.
Thanks for the report!
Daniel
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe