2011-08-20 75 views
2

为什么顶层模块不能在提示(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" 

回答

6

由于the documentation说,顶层模块必须解释,即不进行编译。

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

我猜这里有一个test.otest.hi在早期版本的同一个文件夹中。我能够用这些文件重现错误。删除它们可以解决问题,因为模块将被解释。

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

+1

我不能告诉我的用户在运行代码前删除它们的对象文件。整蛊...... –

0

这样看来,它编译的代码行,但是当它可以追溯到加载当前解释模块,发生问题。

它加载MainfindModule,但是,很显然,加载错误Main:它加载应用程序Main,这的确是不解释,认为这和死亡。

(虽然我要补充我没有使用提示,所以我是一种猜测;)

相关问题