2013-08-06 15 views
16

Cabalにライブラリを構築中にすべてのモジュールを公開することはできますか?Cabal - ライブラリを構築中にすべてのモジュールを公開する

現在、私はExposed-modulesキャバルコンフィギュレーションファイルセクションに非常に長いモジュールリストを提供しなければなりません。

+0

'.cabal'ファイルに言及せずにモジュールをカバールプロジェクトに組み込む方法を聞いていますか? – Heatsink

+0

@Heatsink、no - キャブールを使用してライブラリをコンパイルする場合、 '<...> .cabal'コンフィグレーションファイルを記述する必要があります。このファイルでは、 'Exposed-modules'セクションを提供しています。このセクションでは、公開するすべての**モジュールを一覧表示する必要があります。 **すべての**モジュールを公開したいと思います。 –

+0

それは私の質問に答えません。すべてのモジュールは '.cabal'ファイルにリストされていなければなりません。内部モジュールも 'Other-modules'にリストアップする必要があります。あなたはすべてのモジュールをリストする別の方法を求めているのですか、それともモジュールをリストしないで使用する方法を求めていますか? – Heatsink

答えて

6

明示的なキャバル設定を使用する代わりに、現代の回答はstack + hpackです。それは自動的にパッケージモジュールを公開し、他の多くの拡張機能を提供します。

8

カバール設定ファイルにすべてのモジュールをリストする必要があります。あなたの場合は、exposed-module:の後にモジュールのリストを置くだけです。モジュールのリストを書く簡単な方法はありません。

Cabalは、実行ファイルまたはライブラリの一部であるファイルを自動的に見つけることができないため、設定ファイルのモジュールのリストに依存します。 GHCとは異なり、キャバルはソースコードのインポートステートメントに基づいてモジュールを見つけることができません。すべてのモジュールを一覧表示しないと、GHCがソースファイルを見つけることができるため、プロジェクトをビルドできますが、cabal sdistなどの他のコマンドは、リストされていないソースファイルにはアクセスしません。

+8

Cabalされていないソースツリーで 'cabal init'を実行すると' exposed-モジュールは自動的に更新されますが、後でフィールドを手動で更新する必要があります。 –

+12

@MikhailGlushenkovこれはかなりばかげている。これは "init"(おそらく誰も使用していない)のimport文を解析できますが、他のコマンドでも同じことをすることはできません。これは間違いなく問題です。 –

+2

'exposed-modules'を更新できる外部ツールはありますか?それとも、スタックすることができますか? –

関連する問題