1
我想寫出下列數據結構在Haskell:如何在Haskell中創建一個異構集合?
Renderable a => [a] -- [ClassOne, ClassTwo, ClassThree]
其中Renderable
是一種類
class Renderable a ...
和所有的具體類的實現類型類
instance Renderable ClassOne ...
instance Renderable ClassTwo ...
instance Renderable ClassThree ...
這是一個具體的例子是,遊戲引擎的類別爲World
。
data World a = World {
-- ...
wEntities :: [a]
}
但是,這會強制使用同源列表。我可以寫
{-# ExistentialQuantification #-}
data World = forall r. Renderable r => World {
-- ...
wEntities :: [r]
}
,但我得到的錯誤
Record updates for insufficiently polymorphic fields
寫
world { wEntities = fmap fn (wEntities world) }
時是否有允許基於一個類型類的異質收集任何的替代品?
我想Google已經給了你這篇文章,但以防萬一:http://www.haskell.org/haskellwiki/Heterogenous_collections – 2014-09-06 18:33:18