2014-01-15 13 views
6

をのhaskell複数のパッケージで見つかった:Control.Monad.Writerは、私はこのような<code>Control.Monad.Writer</code>モジュールをインポートしようとした

import Control.Monad.Writer 

ghcバージョン7.4.1には、次のエラーを与える:

Ambiguous module name `Control.Monad.Writer': 
     it was found in multiple packages: monads-tf-0.1.0.1 mtl-2.1.1 

あり同様の問題のある質問と回避策here

このスレッドでは解決策がありますが、私の質問は次のとおりです:
これはcabalとghcの標準設定ですか?
- そうなら:モジュールがデフォルトで2つのパッケージに含まれる理由はありますか?
- そうでない場合:何が起こったのかもしれないし、元に戻すことができますか?

私はに取り組んでいます。Debian 7.3 wheezyをインストールし、haskell-platformパッケージをインストールしました。さらに、cabal installを使っていくつかのパッケージをインストールしました。

事前に感謝します。

答えて

6

はい、これは「標準」です。その理由はmtlパッケージの歴史的なリファクタリングで、MonadWriterクラスのような複数のパラメータを持つ2つの異なるスタイルのハンドリングタイプクラスに対応するためです:type familiesfunctional dependenciesです。

mtlパッケージは古い関数依存関係のアプローチを保持しますが、monads-tfは新しいタイプのファミリアプローチを持ちます。今monads-tfを使用するHaskellの生態系内のライブラリがあるとして

は、それは両方とも、典型的なインストールでパッケージデータベースに終わるだろうということは避けられない - 私は個人的には、数週間のためにそれを経験してきました。

+1

あなたは 'monads-tf'で書かれた新しいパッケージを探していますか?私はそれが効果的に 'mtl'の人気によって非難されたと思った。あなたは 'PackageImports'でこの問題を解決できますか? –

+1

私はghciでこれをほとんどヒットしました。リンクされた答えが示唆するように、キャバールパッケージでは、依存するものを選択するだけです。私は実際にモナドを引っ張ったものを追跡していませんでした。私はそれを知っています:-) –

+1

http://packdeps.haskellers.com/reverse/monads-tfから、私は 'MonadCatchIO-transformers'の存在を疑う間接的な原因:http://packdeps.haskellers.com/reverse/MonadCatchIO-transformers –

関連する問題