Как заставить интерпретацию в подсказке
Как включить режим интерпретации в подсказке (Language.Haskell.Interpreter)?
У меня есть этот код:
module Main where
import Language.Haskell.Interpreter
import Control.Monad
main = do
res <- runInterpreter (test "test")
case res of
Left e -> putStrLn (show e)
Right t -> putStrLn (show t)
return ()
test :: String -> Interpreter ()
test mname =
do
loadModules [mname ++ ".hs"]
setTopLevelModules ["Main"]
Результатом будет (на основании ответов здесь):
NotAllowed "These modules are not interpreted:\nMain\n"
только если GHC находит test.o!
я пробовал
unsafeSetGhcOption ("-fbyte-code")
1 ответ
Решение
С использованием -fforce-recomp
Опция, кажется, заставляет интерпретацию при использовании из GHCi/Hint.
unsafeSetGhcOption "-fforce-recomp"
Хотя я не смог найти никакой документации для проверки этого, кажется разумным, что GHCi/Hint будет повторно использовать проверку перекомпиляции из GHC.
ОБНОВЛЕНИЕ: копаясь немного больше, я нашел билет GHC# 2542, где указано, что префикс имени модуля со звездочкой вызовет интерпретацию в GHCi. Это также подтверждается в документации.
:load *test.hs
Это, кажется, переносится и на подсказку, так что это также работает:
loadModules ["*" ++ mname ++ ".hs"]