2011-08-20 4 views
2

힌트 (Language.Haskell.Interpreter)에서 최상위 모듈을 "메인"으로 설정할 수없는 이유는 무엇입니까?최상위 모듈을 힌트로 메인으로 설정할 수없는 이유

하는 나를 보여 허용 :

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

을, 최고 수준의 모듈 즉 컴파일되지 해석되어야한다.

모듈을로드 할 때 사용 가능한 경우 컴파일 된 버전이 사용됩니다. GHCi manual에 이에 대한 자세한 정보가 있습니다.

이전 빌드와 동일한 폴더에 test.otest.hi이 있다고 생각됩니다. 나는이 파일들에 오류를 재현 할 수 있었다. 모듈을 삭제하면 모듈이 해석되므로 문제가 해결됩니다.

모듈 이름 앞에 별표 (예 :.)를 붙이면 해석 모드에서 모듈을 강제로로드 할 수도 있습니다. loadModules ["*" ++ mname ++ ".hs"].

+1

코드를 실행하기 전에 내 사용자에게 객체 파일을 삭제하도록 말할 수는 없습니다. 교활한... –

0

현재의 해석 모듈을로드 다시 전환 될 때 코드 확인을 컴파일하지만 그 나타납니다, 문제가 발생합니다.

그것은 findModuleMain로드하지만, 분명히 잘못된 Main로드 : 그것은 참으로 해석되지 않은 응용 프로그램 Main을로드 있어요는 것을보고, 그리고 죽는다. (내가 가지 추측하고있어 그래서 내가 힌트를 사용하지 않은 추가해야하지만)

the documentation가 말한대로

관련 문제