2013-06-07 5 views
1

Следуя за example file, я пытаюсь динамически вызывать операцию ввода-вывода.Language.Haskell.Interpreter - как правильно называть действия IO?

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

К сожалению, строка "some string" никогда не печатается. Я также пытался позвонить writeFile, но файл не был создан.

Итак, что необходимо для включения этих побочных эффектов? Спасибо!

ответ

3

interpret не запускает никаких действий IO самостоятельно. Это будет просто оценить его и вернуть его к вам, и тогда вы должны запустить его самостоятельно, например, с помощью liftIO:

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

Это отлично работает. Спасибо, @hammar! – user1546806