为什么顶级模块不能在Hint(Language.Haskell.Interpreter)中设置为“Main”?
请允许我演示:
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"
答案 0 :(得分:6)
如the documentation所述,必须解释顶层模块,即不编译。
加载模块时,如果可用,将使用编译版本。 GHCi manual有更详细的信息。
我猜测早期版本的同一文件夹中有test.o
和test.hi
。我能够使用这些文件重现错误。删除它们可以解决问题,然后解释模块。
您还可以通过在模块名称前加上星号前缀来强制模块以解释模式加载,例如: loadModules ["*" ++ mname ++ ".hs"]
。
答案 1 :(得分:0)
它似乎可以编译代码OK,但是当它返回加载当前解释的模块时,就会出现问题。
它会Main
加载Main
,但显然会加载错误的Main
:它正在加载应用程序{{1}},它确实没有被解释,看到了,模具
(虽然我应该补充一点,我没有使用提示,所以我有点猜测;)