2

Hint(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"
4

2 に答える 2

6

ドキュメントにあるように、最上位モジュールは解釈する必要があります。つまり、コンパイルしないでください。

モジュールをロードするとき、利用可能な場合はコンパイル済みバージョンが使用されます。GHCi マニュアルには、これに関するより詳細な情報があります。

以前のビルドと同じフォルダーに and がtest.oあると思います。test.hiこれらのファイルが存在する状態でエラーを再現できました。それらを削除すると、モジュールが解釈されるため、問題が解決します。

モジュール名の前にアスタリスクを付けることで、モジュールを強制的に解釈モードでロードすることもできますloadModules ["*" ++ mname ++ ".hs"]

于 2011-08-20T21:11:36.977 に答える
0

コードは正常にコンパイルされているように見えますが、現在の解釈されたモジュールをロードするために戻ると、問題が発生します。

それはfindModuleMainでロードされますが、どうやら、間違ったものをロードしています。実際には解釈されなかったアプリケーションをロードしていて、それを見て、死んでいます。MainMain

(私はヒントを使用していないので、ちょっと推測しています;)

于 2011-08-20T20:59:18.243 に答える