在阅读haskellwiki上的类型族时,我看到了以下示例
class Collects ce where
type Elem ce
empty :: ce
insert :: Elem ce -> ce -> ce
class GMapKey k where
data GMap k :: * -> *
empty :: Gmap k v
insert :: k -> v -> GMap k v -> Gmap k v
地图收集了vs,感觉比vs和KS大。但似乎GMapKey有一个关联的GMap,而我原本以为这个关系是相反的。
当我在数据族和类型同义词族之间进行选择时,这是要遵循的模式吗(数据族:container是关联的类型,类型同义词族:element是关联的类型)?或者这是一个/有一个区别不相关,两个例子本来可以互换?
我建议这样考虑:GMAP
族与K
相关联,您必须有一个与K
相关联的GMAP
类型族实例,以便K
用作GMapKey
。
在这些选项之间的选择更多地取决于您的需求,而不是其他任何东西。当键类型指示映射实现时,GMAP K
方法更可取:例如,对Int
键使用IntMap
;但对其他键使用另一种类型的map
。