我想什麼,能夠做的就是像下面這樣:使用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_
的想法是,如果一些數據結構是可轉位,我應該能夠索引Keyed
由同一類型的包裝它(加上Key a
索引)。
應該很容易轉換傳遞給ixFun
在包裝類型的指數與Keyed
,而不是a
工作職能:只是value
組成。但我找不到任何實際獲得這些功能的方法。
我也看過ixset類型的包;那裏的Indexable版本實際上提供了一個索引列表,而不是一個空的IxSet。這似乎更適合於重用索引,但「索引列表」是一種不導出其構造函數的自定義類型,所以我似乎無法得到它們。
我錯過了任何支持這種用法的東西嗎?
是的,類似的東西就是我的備份計劃。它不允許我重用現有的'Indexable'實例,但實際上我沒有立即使用它。你是對的,它出來相當不錯;也許我會看看是否可以將它包含在上游。 – Ben