私ができるようにしたいのは、次のようなものです。
import Data.IxSet
newtype Key a = Key Integer
deriving (Eq, Ord, Show)
data Keyed a = Keyed { key :: (Key a), value :: a }
deriving (Eq, Ord, Show)
instance Indexable a => Indexable (Keyed a)
where empty = ixSet $ ixFun (\k -> [key k]) : _somehow_reuse_indices_of_a_
Keyed
アイデアは、一部のデータ構造が Indexable である場合、同じ型 (および のインデックス)でラップするインデックスを作成できるはずだということKey a
です。
ixFun
ラップされた型のインデックスで渡された関数を のKeyed
代わりに使用するように変換するのは簡単なはずa
ですvalue
。しかし、これらの機能を実際に取得する方法が見つかりません。
ixset タイプのパッケージも調べました。そこにある Indexable のバージョンは、空の IxSet ではなく、実際にはインデックスのリストを提供します。これは、インデックスを再利用する方がはるかに適しているように見えますが、「インデックスのリスト」はコンストラクターをエクスポートしないカスタムタイプであるため、それらを取得できないようです。
この種の使用法をサポートするものを見逃していませんか?