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

时间:2011-08-20 20:34:11

标签: haskell ghc hint ghc-api

为什么顶级模块不能在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"

2 个答案:

答案 0 :(得分:6)

the documentation所述,必须解释顶层模块,即不编译。

加载模块时,如果可用,将使用编译版本。 GHCi manual有更详细的信息。

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

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

答案 1 :(得分:0)

它似乎可以编译代码OK,但是当它返回加载当前解释的模块时,就会出现问题。

它会Main加载Main,但显然会加载错误的Main:它正在加载应用程序{{1}},它确实没有被解释,看到了,模具

(虽然我应该补充一点,我没有使用提示,所以我有点猜测;)