5

私ができるようにしたいのは、次のようなものです。

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 ではなく、実際にはインデックスのリストを提供します。これは、インデックスを再利用する方がはるかに適しているように見えますが、「インデックスのリスト」はコンストラクターをエクスポートしないカスタムタイプであるため、それらを取得できないようです。

この種の使用法をサポートするものを見逃していませんか?

4

1 に答える 1