在 haskellwiki 上阅读类型族,我看到了这个例子
class Collects ce where
type Elem ce
empty :: ce
insert :: Elem ce -> ce -> ce
这对我来说很有意义,因为我使用了我的(可能适得其反的)OOP 隐喻——Collects 的一个实例具有关联类型(同义词)Elem 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,当我期望关系走向另一个方向时。
当我在数据系列和类型同义词系列之间进行选择时,这是要遵循的模式吗(数据系列:容器是关联类型,类型同义词系列:元素是关联类型)?还是这 IS A / HAS A 区别无关紧要,这两个例子可以互换?