私はcabal-dev
自分が取り組んでいるプロジェクトに挑戦しています。このプロジェクトはライブラリでありcabal-dev
、サンドボックスバージョンを構築するのに最適ですが、ワークフローの一部に問題があります...
私はスクリプトを持っています。scratch.hs
これは(前に)何かを試すためcabal-dev
にロードします。ghci
もちろん、作業している機能によって内容はscratch.hs
時間とともに変化します。 scratch.hs
これはライブラリコードベースの一部ではなく、作業中の個人的なスクラッチスペースにすぎません。
さて、ghci
サンドボックスをロードした状態でセッションを取得するためにcabal-dev ghci
、それをロードscratch.hs
することができます。問題は、これが(設計上、そして賢明に)私のユーザーパッケージデータベースを除外することです。したがってscratch.hs
、私のライブラリにないパッケージからモジュールを参照する場合build-depends
(これは不合理ではありません-結局のところライブラリの一部ではありません)、それらのパッケージはそうではありません表示されないため、次のようなエラーが発生します。
scripts/scratch.hs:8:8:
Could not find module `Data.Aeson.Generic':
It is a member of the hidden package `aeson-0.3.2.11'.
Perhaps you need to add `aeson' to the build-depends in your .cabal file.
Use -v to see a list of the files searched for.
Failed, modules loaded: none.
ここで、この場合、scratch.hs
インポートしたいのですData.Aeson.Generic
がaeson
、私のライブラリにはありませんがbuild-depends
(かなり適切に)、ユーザーパッケージデータベースにはあります。
では、どうすればこれを回避できますか?これらのカテゴリのいずれかで答えを想像することはできますが、見逃したカテゴリがあるかもしれません。
によって作成されたサンドボックスと組み合わせて、ユーザーパッケージデータベースのパッケージを(選択的に)使用する方法
cabal-dev
。(おそらく私自身のcabal-dev ghci
スタイルのスクリプトをローリングしますか?)問題がなくなるようにワークフローを改善する方法についての提案。
パッケージをグローバルにインストールするだけでよいことはわかっていますが、この方法でグローバルパッケージデータベースを汚染することには消極的です(そしてcabal-dev
これを明示的に阻止します)。
すべてのアドバイスに感謝します。