Search code examples
haskellinterpretermonadsghc-api

Language.Haskell.Interpreter - how to properly call IO actions?


Following the example file, I try to dynamically call an IO action.

testHint :: Interpreter ()
testHint = do
                setImportsQ [("Prelude", Nothing)]
                let somecode = "putStrLn \"some string\""
                interpret somecode (as :: IO ())
                say "hello"

Unfortunately, the string "some string" is never printed. I also tried to call writeFile but no file was created, either.

So what is needed to enable these side effects? Thank you!


Solution

  • interpret won't run any IO actions on its own. It'll just evaluate it and return it to you and then you have to run it yourself, for example using liftIO:

    interpret somecode (as :: IO ()) >>= liftIO