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

Reply via email to