haskell-jp / questions #102 at 2022-09-10 14:20:01 +0900

ライブラリを書いており、テスト用にライブラリ内で定義した型の QuickCheckの Arbitrary インスタンスを作成しようと考えています。 Arbitrary インスタンスをどこに書くのが良いのかで悩んでいます。
このライブラリを他のプロジェクトから使った時にも Arbitrary インスタンスを使えるようにしたいので、テストコード側ではなくライブラリ側に書きたいと考えています。
しかし、インスタンスを書く為に必要な quickcheck-instancesライブラリがそれ自身を他のライブラリの依存パッケージとしないことを推奨しているため、「ライブラリ側に書く」のを躊躇しています。
別のライブラリとして記述するという方法もあると思いますが、それだと後々整合性を持たせるのを忘れそうなのであまり使いたくないなぁと思っています。

この場合どこに書くのが適切なのでしょうか
よくある方法は、一つのリポジトリーにおける別のパッケージにしてしまう方法だと思います。それなら整合性の問題は解決しやすいかと(まとめてCIでテストしたりできるでしょうし)
あと、似たようなものですが最近のcabalは一つのパッケージに複数のライブラリーをおけるはず... ですがこちら使用した例を全く聞いた事がないのでちょっと分からないです。
そうか、レポジトリを一つにすることが出来るんですね
stack だと packages あたり、cabalだと cabal.projectpackages あたりでしょうか。
cabalの複数ライブラリは、調べた所というのがあるようですね。これはそのパッケージのみから参照出来るライブラリを定義するようなので、今回の例だと違いそうです。
今はstackを使っているので、stack.yamlの packages で試してみようかと思います!ありがとうございます!
cabalの複数ライブラリは、調べた所というのがあるようですね。
いや、その直後のセクションに書いてある、「*Multiple public libraries*」のことです。
本当だ!見逃しており気が付いていませんでした...orz