使用IxSet,我可以围绕任意Indexable类型构建一个Indexable包装器吗?

时间:2015-09-09 07:42:29

标签: haskell happstack

我希望能够做的事情如下:

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_

我的想法是,如果某些数据结构是Indexable,我应该能够将Keyed包装成相同的类型(加上Key a上的索引)。

将包装类型索引中传递给ixFun的函数转换为与Keyed而不是a一起使用应该很容易:只需使用{{1}撰写}。但我找不到任何方法来实际掌握这些功能。

我还看了一下ixset类型的包; Indexable的版本实际上提供了一个索引列表,而不是一个空的IxSet。这似乎更适合重复索引,但索引列表"是一种不会导出其构造函数的自定义类型,因此我似乎无法获取它们。

我是否遗漏了任何支持此类用法的内容?

0 个答案:

没有答案