2011-08-20 37 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,這的確是不解釋,認爲這和死亡。

(雖然我要補充我沒有使用提示,所以我是一種猜測;)

相關問題