問題を再現できません。
の署名がないと、質問に記載されている理由と、考えられる原因(実際には原因であり、単相性の制限です)と2つの可能性のある、あいまいな型変数エラー(2つ)が発生しtrie
ます。修正(単相制限を無効にするとコンパイルされますが、明示的な型シグネチャを指定する方が適切です)。エラーメッセージは、過度に関心のある魂のために以下に追加されます(7.6.1からです)。
型署名を使用すると、クリーンにコンパイルされます。
それを踏まえると、問題を確実に診断することはできませんが、発生したエラーメッセージと一緒に経験することで、考えられる原因がわかります。
必要なインスタンスがスコープ内にないという非常に具体的なメッセージが表示されました。
No instance for (Data.ListTrie.Base.Map.Map Map.Map Char) arising from a use of TrieM.fromListWith'
Possible fix: add an instance declaration for (Data.ListTrie.Base.Map.Map Map.Map Char)
一方、list-triesパッケージは、そのようなインスタンスを明示的に提供します。
このような状況の一般的な原因は、同じパッケージの異なるバージョンに由来する2つの異なるクラスまたは2つの異なるタイプが関係していることです。
この場合、list-tries
あるバージョンに対してビルドしcontainers
、後で別のバージョンのをインストールし、新しいパッケージバージョンからタイプをインポートし、のインスタンスcontainers
はimport qualified Data.Map as Map
古いバージョン用である可能性があります。Map.Map
list-tries
で複数のバージョンがcontainers
インストールされているかどうかを確認します
ghc-pkg list containers
に依存しているバージョンを確認してcontainers
くださいlist-tries
ghc-pkg describe list-tries
そのdepends
出力のフィールドには、次のようなものが表示されます
containers-0.5.0.0-e49be7a240765a4edc5c09f677ec6a81
containers
パッケージのバージョンとパッケージのABIハッシュのリストはで作成list-tries
されました。
バージョンがインストールした最新バージョンに対応していない場合、フラグを使用して直接、またはファイルを介して間接的にGHCを呼び出すときに、使用するバージョンが明示的に指定されてcontainers
いない限り、上記の状況が発生します。containers
-package
.cabal
その場合は、次のことができます
containers
使用するたびに使用するバージョンを明示的に指定するlist-tries
- 新しいバージョンの登録を解除し
containers
ます(他のパッケージが破損する可能性があります)
list-tries
新しいバージョンに対して再構築しますcontainers
TrieTest.hs:12:8:
No instance for (Data.ListTrie.Base.Map.Map map0 Char)
arising from a use of TM.fromListWith'
The type variable `map0' is ambiguous
Possible cause: the monomorphism restriction applied to the following:
trie :: TM.TrieMap map0 Char (TS.TrieSet map1 Char)
(bound at TrieTest.hs:12:1)
Probable fix: give these definition(s) an explicit type signature
or use -XNoMonomorphismRestriction
Note: there are several potential instances:
instance Eq k =>
Data.ListTrie.Base.Map.Map Data.ListTrie.Base.Map.AList k
-- Defined in `Data.ListTrie.Base.Map'
instance Ord k => Data.ListTrie.Base.Map.Map Map.Map k
-- Defined in `Data.ListTrie.Base.Map'
instance Enum k =>
Data.ListTrie.Base.Map.Map Data.ListTrie.Base.Map.WrappedIntMap k
-- Defined in `Data.ListTrie.Base.Map'
Possible fix:
add an instance declaration for
(Data.ListTrie.Base.Map.Map map0 Char)
In the expression: TM.fromListWith' (flip TS.union)
In the expression:
TM.fromListWith' (flip TS.union)
$ map (\ v -> (sort v, TS.singleton v)) vocabs
In an equation for `trie':
trie
= TM.fromListWith' (flip TS.union)
$ map (\ v -> (sort v, TS.singleton v)) vocabs
TrieTest.hs:12:31:
No instance for (Data.ListTrie.Base.Map.Map map1 Char)
arising from a use of `TS.union'
The type variable `map1' is ambiguous
Possible cause: the monomorphism restriction applied to the following:
trie :: TM.TrieMap map0 Char (TS.TrieSet map1 Char)
(bound at TrieTest.hs:12:1)
Probable fix: give these definition(s) an explicit type signature
or use -XNoMonomorphismRestriction
Note: there are several potential instances:
instance Eq k =>
Data.ListTrie.Base.Map.Map Data.ListTrie.Base.Map.AList k
-- Defined in `Data.ListTrie.Base.Map'
instance Ord k => Data.ListTrie.Base.Map.Map Map.Map k
-- Defined in `Data.ListTrie.Base.Map'
instance Enum k =>
Data.ListTrie.Base.Map.Map Data.ListTrie.Base.Map.WrappedIntMap k
-- Defined in `Data.ListTrie.Base.Map'
Possible fix:
add an instance declaration for
(Data.ListTrie.Base.Map.Map map1 Char)
In the first argument of `flip', namely `TS.union'
In the first argument of TM.fromListWith', namely `(flip TS.union)'
In the expression: TM.fromListWith' (flip TS.union)