2016-05-03 15 views
1

私の問題が何であるか分かりません。私はA.hs、B.hs、C.hsの三つのモジュールを持っています。全てC:\..path...\folderに位置し、BとCモジュールBとCの両方がIはgchiで:l C:\..path..\folder\A.hsができ、その内容でプレイラインをimport A依存関係を持つHas​​kellモジュールをロードする

を含む、あるA.

両方からインポートモジュールです。私は何の問題B.exeにB.hsをコンパイルし、実行可能ファイルを実行しなかったので、私は奇妙な見つける:l C:\..path..\folder\B.hsまたは:l C:\..path..\folder\C.hs

Could not find module `A' 
    Use -v to see a list of the files searched for. 
Failed, modules loaded: none. 

しようとすると、しかし、GHCiのは、次のエラーが発生します。 ghciにロードできないモジュールをコンパイルして実行するにはどうすればよいですか?あるいは、なぜコンパイル時にインポートが成功するのですが、読み込みに失敗しますか?特にインポートされているモジュール自体がロード可能な場合は特にですか?

+0

私は一度同様の問題を抱えていました。起動時にモジュールをロードすると( 'ghci A.hs B.hs')、エラーになりますか? –

+0

うーん、私はそれを試して、いくつかの警告と動作します。 ghciがghciを起動したら、ghciは両方のモジュールのクレームを作成します – Tshimanga

+0

Hmm、いくつかの注意点があります: 'ghci A.hs B.hs'を起動すると、ghciは両方のモジュール読み込まれていますが、実際にコンテンツとのやりとりを開始すると、A.hsの関数と型だけがアクセス可能になります。私はB.hs.で何のためにスコープ内のエラーを取得します。 私が引数を交換すると(代わりに 'ghci B.hs A.hs'として起動します)、私は両方の内容で遊ぶことができます。この特異性はそれ自体が興味深いです。 まだ、元のアプローチが失敗した理由を理解することの問題は依然として立っています。しかし、この回避策は高く評価されています。ありがとうございます@WolfeMacfarlane – Tshimanga

答えて

4

デフォルトでは、ghciは、現在のディレクトリでインポートされたモジュールのみを検索します。まず、現在のディレクトリはghciの起動に使用されたディレクトリです。 :cdコマンドでghciの範囲から変更することができます。したがって、あなたは

> :cd C:\...path...\folder 
> :l B.hs 

、これは現在のディレクトリであるものに両方B.hsA.hsを見つける必要があります可能性があります。また、複数のディレクトリにモジュールがある場合は、-iコマンドラインオプションを指定してghciを起動して、ディレクトリをモジュール検索パスに追加することもできます。たとえば、あなたのコマンドであなたは、その検索パスにC:\...path...\folderが含まれ、したがって、それは、現在のディレクトリでない場合であってもそこB.hsA.hsを見つけることghciを指示します

% ghci -iC:\...path...\folder 
> :l B.hs 

を促しかもしれません。

+0

ああ、そうだ。それは間違いなく意味をなさない。ありがとうダニエル – Tshimanga

関連する問題