2017-11-04 10 views
6

同じ名前のモジュールを提供する2つのパッケージがあります。モジュールをロードしようとすると、エラーが発生します2つのモジュールが同じ名前を共有する場合はどうすればよいですか?

のためのあいまいなインターフェイス....:複数のパッケージで見つかりました。

これを解決するにはどうすればよいですか?

具体的には、cryptoniteパッケージとパッケージの両方が、Crypto.Randomという名前のモジュールを提供します。モジュールをロードするパッケージを指定するにはどうすればよいですか?

答えて

7

あなたはPackageImports言語プラグマを使用して明示的にあなたがそうのようなあなたのimport文で意味のパッケージを選ぶことができます。

import "cryptonite" Crypto.Random 

また、あなたが両方インストールされているだけでそれらのいずれかを使用している場合、あなたは明示的に一覧表示できcabalファイルで使用している依存関係をcabalでビルドします。

8

あなたがGHCを使用することが起こる場合は> = 8.2徒党インストール> = 2.0、別のオプションは、徒党ファイルのmixinsセクションに矛盾するモジュールの名前を変更します

build-depends:  base >=4.10 && <4.11, 
         cryptonite >= 0.24, 
         crypto-api >= 0.13.2 
    mixins: 
         cryptonite (Crypto.Random as CryptoniteCrypto.Random), 
         crypto-api (Crypto.Random as CryptoAPICrypto.Random) 

あなたはその後、名前を変更したモジュールをインポートすることができます。この方法の名前を変更する際に考慮すべき

module Main where 

import CryptoniteCrypto.Random 
import CryptoAPICrypto.Random 

ことの一つは、明示的に名前が変更されていないモジュールがIになるということですアクセスできない。実際に

-packageフラグと再輸出・モジュール徒党部を介して、モジュールseems to exist since GHC 7.10の名前を変更する能力。 reexported-modulesは、宣言時(パッケージ発行時)に動作し、mixinsは、パッケージ(パッケージによって異なる)で動作します。

+1

お役立ち情報私は 'PackageImports'言語拡張を使って提案したもう一つの答えを受け入れました。なぜなら、私の問題を非常に簡単に解決するからです。しかし、あなたの提案も素晴らしい解決策のように思えます。 – user668074

関連する問題