3

ここにリストされているHaskellパッケージがたくさんあります:

http://hackage.haskell.org/packages/archive/pkg-list.html#cat:database

これらのパッケージはすべて相互に互換性がありますか?プログラムを作るために例えば10個のパッケージを持ってきたら、それらはすべて大丈夫ですか?ページに記載されているすべてのパッケージを持ち込んだ場合はどうなりますか?

Javaを使用している場合、JavaでWeb全体からたとえば10個のjarを取り込む場合、JAR間に依存関係がある可能性があります。つまり、あるJARが別のJARのバージョンを必要とし、別のJARには適切なバージョンではありません。たとえば、1つのJARにHibernateバージョン3.0.0が必要で、別のJARにHibernate2.0.0が必要な場合があります。したがって、これら2つのjarは、共通の同等のHibernateバージョンを使用していないため、使用できません。

4

2 に答える 2

6

いいえ、でも

  1. パッケージはすべて、バージョン範囲を含む依存関係を宣言します
  2. cabal-installを使用する場合は、すべての一貫性を保つために最善を尽くします。ほとんどの場合、それはかなり良い仕事をします。古いバージョンへの依存関係のためにソフトウェアをビルドすることができませんでしたが、cabalがだまされる状況を見たことがありません。cabalがパッケージをインストールすると、機能します。そしてcabalはおそらくあなたのためにパッケージをインストールします
于 2012-06-04T02:37:12.943 に答える
6

Haskellでも同じ問題がありますが、指摘されているように、Cabalは依存関係を最善の方法で解決するのに非常に賢いです。

Cabalはパッケージの複数のバージョンを喜んでインストールしますが、独自のパッケージを作成するときに微妙なエラーが発生する可能性があります。パッケージは間接的に複数のバージョンに依存している可能性があります(Cabalは実行時に警告しますconfigure)。あるタイプ、たとえばStateに間接的に(たとえば、型推論を介して)、ある場所ではmtl 1.xに、別の場所ではmtl 2.xに解決される可能性があり、2つを統合することはできません。これは、2つのパッケージを使用していて、それらをコードで組み合わせたい場合に問題になります。それはめったに問題ではありませんが、注目に値します。

Haskellパッケージは通常、単一のバージョンではなくバージョン範囲に依存していることにも注意してください。これは、Cabalが受け入れられたバージョンの共通部分を構築し、その中で最新のものを使用することを意味します。

于 2012-06-04T03:08:11.450 に答える