2011-08-03 21 views
21

申し訳ありません、これはちょっと疑問ですが、複数のモジュールを同じファイルに配置する方法を理解できません。ファイル名がAhでであるとします。私はB最初のモジュールを入れた場合、すなわちHaskell - 同じファイルで複数のモジュールを使用するには?

module B where ... 
module A where ... 

それは私が「GHCiのA」(「それはトップレベルではないので、私はコールする必要はありませんGHCiのAを実行したときに、それはを期待していることを訴えます.hs ")。逆の方法で、 "入力モジュールの解析エラー"と文句を言う)。

ここには、関連するバグhttp://hackage.haskell.org/trac/ghc/ticket/2428があります。他のモジュールがローカルでのみ使用されていても、実際にはこれを得る方法はありませんか?

+6

+1良い質問ですが、答えは本質的に「あなたはできません」 –

+0

簡単に言えば、なぜこれが欲しいのですか? – Tarrasch

+0

@Tarrasch主に、同じフィールド名を持つ2つのレコードタイプを定義するとき、名前の競合を回避することでした。 – gatoatigrado

答えて

19

同じファイル内に複数のモジュールを持つことはできません。あなたがリンクしたバグは、GHCがこれに関して明らかではないエラーメッセージに関するものです。

あなたが陰謀団を使用している場合しかし、あなたはまだあなたがExposed-Modulesセクションでユーザーに表示するモジュールを入れ、そしてOther-Modules内の任意の内部モジュールを置くことによって、モジュールの可視性を制御することができます。

7

以下が見つかりました。bug report

述べ、このmailing list item、を参照:

No, that's not possible because haskell will use the module name A.B.C to look the module up in path A/B/C.[l]hs. 
So using modules 
module A where 
.. 
module B where 
the compiler could only find one of them. (naming the file A.hs or B.hs) 
You have to use one file for each module 

をので、私は答えはノーだと思います。

+0

その投稿への返信は、それがGHC固有の制限であることを指摘していますが、仕様はそれを要求していません –