提问者:小点点

类型类、关联族->容器、键和元素:谁是谁?


在阅读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是关联的类型)?或者这是一个/有一个区别不相关,两个例子本来可以互换?


共1个答案

匿名用户

我建议这样考虑:GMAP族与K相关联,您必须有一个与K相关联的GMAP类型族实例,以便K用作GMapKey

在这些选项之间的选择更多地取决于您的需求,而不是其他任何东西。当键类型指示映射实现时,GMAP K方法更可取:例如,对Int键使用IntMap;但对其他键使用另一种类型的map