为什么不能在提示中将顶级模块设置为main

Dan*_*l O 2 haskell hint ghc ghc-api

为什么不能在提示(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"]
Run Code Online (Sandbox Code Playgroud)

将导致:

NotAllowed "These modules are not interpreted:\nMain\n"
Run Code Online (Sandbox Code Playgroud)

ham*_*mar 6

正如文档所述,必须解释顶级模块,即不编译.

加载模块时,如果可用,将使用编译版本.该GHCI说明书对此有更详细的信息.

我猜是有一个test.otest.hi早期版本的同一个文件夹.我能够使用这些文件重现错误.删除它们可以解决问题,然后解释模块.

您还可以通过在模块名称前面添加星号来强制模块以解释模式加载,例如loadModules ["*" ++ mname ++ ".hs"].