我希望您能够做到以下类似的事情:
这个想法是,如果某个数据结构是可索引的,我应该能够通过相同类型(加上对Key a的索引)来索引一个包装它的Keyed。
将传递给ixFun的函数在包装类型的索引中转换为使用Keyed而不是a应该很容易:只需与value组合即可。但我找不到任何实际访问这些函数的方法。
我还看了一下ixset-typed包;那里的Indexable版本实际上提供了索引列表,而不是空的IxSet。这似乎更适合重用索引,但“索引列表”是一种自定义类型,其不导出其构造函数,因此我似乎无法获取它们。
我是否错过了任何支持这种用法的东西?
如下所示:
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_
这个想法是,如果某个数据结构是可索引的,我应该能够通过相同类型(加上对Key a的索引)来索引一个包装它的Keyed。
将传递给ixFun的函数在包装类型的索引中转换为使用Keyed而不是a应该很容易:只需与value组合即可。但我找不到任何实际访问这些函数的方法。
我还看了一下ixset-typed包;那里的Indexable版本实际上提供了索引列表,而不是空的IxSet。这似乎更适合重用索引,但“索引列表”是一种自定义类型,其不导出其构造函数,因此我似乎无法获取它们。
我是否错过了任何支持这种用法的东西?