3

如何在提示(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")
4

1 回答 1

4

从 GHCi/Hint 使用时,使用该-fforce-recomp选项似乎会强制解释。

unsafeSetGhcOption "-fforce-recomp"

虽然我找不到任何文档来验证这一点,但 GHCi/Hint 将重用 GHC 的重新编译检查似乎是合理的。


更新:再挖掘一下,我发现了GHC 票 #2542,其中指出在模块名称前加上星号将强制在 GHCi 中进行解释。这也在文档中得到证实。

:load *test.hs

这似乎也适用于 Hint,所以这也有效:

loadModules ["*" ++ mname ++ ".hs"]
于 2011-08-21T15:13:33.370 回答