import Control.Monad
import Language.Haskell.Interpreter

main :: IO ()
main = do r <- runInterpreter testHint
          case r of
            Left err -> printInterpreterError err
            Right () -> putStrLn "that's all folks"

testHint :: Interpreter ()
testHint =
    do
      loadModules ["SomeModule.hs"]
      setTopLevelModules ["SomeModule"]
      setImportsQ [("Prelude", Nothing)]
      --the following expression will generate an error message without context??
      let expr = "do\n   putStrLn \"foo\"\n   putStrLn $ \"bar\" + 1\n"
      interpret expr (as :: IO ())
      return ()

printInterpreterError :: InterpreterError -> IO ()
printInterpreterError e = putStrLn $ "Ups... " ++ (show e)

