私は2つのIntMaps使用した文書のレコードがあります。異なるキータイプでIntMapを使用するには?
data Doc = Doc { kernels :: IntMap Kernel, nodes :: IntMap Node }
をしかし、私は両方のIntMapsから鍵が異なる意味を持っていることを発見し、私は2つの貴様の種類に分離するために失敗したときにミックスエラーを得ることはありませんカーネルタイプとノードタイプ。私は、カーネルマップとノードマップからキーをチェックする機能を持ち、ミックスアップを許可しません。例えば:
someFunction :: Doc -> KernelKey -> NodeKey -> a
someFunction doc k1 k2 = .....
代わりの現在:
someFunction :: Doc -> Int -> Int -> a
someFunction doc k1 k2 = .... -- warning check twice k1 and k2
はそれがかのうですか?またはIntMap
からMap
に変更します。
おかげ
'Map'の代わりに' IntMap'を使う理由は何ですか?パフォーマンスの場合は、 'unordered-containers'(これはあなたにとって最適な解決策かもしれませんが、考慮する価値があります)を考慮する必要があります。 –
'IntSet'に関する関連する質問を参照してください。http://stackoverflow.com/questions/5746590/how-to-newtype-intset ...あなたは[' enummapset'パッケージ](http: /hackage.haskell.org/package/enummapset)、これは私が現在使っているものです – hvr