閱讀有關type families on haskellwiki,我看到的例子類型類,相關係列 - >容器,鍵和元素:誰是誰?
class Collects ce where
type Elem ce
empty :: ce
insert :: Elem ce -> ce -> ce
這對我來說很有意義,因爲我用我的(可能適得其反)OOP的隱喻 - 收集的實例有一個相關聯的類型(代名詞)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,當我預期關係走向另一條路時。
當我在數據族和類型同義詞族之間進行選擇時,這是遵循的模式(數據族:容器是關聯類型,類型同義詞族:元素是關聯類型)?或者這是否與A/HAS的區別無關緊要,這兩個例子是否可以互換?
謝謝路易斯,這很有道理。我可能錯過了這一點,因爲我面前的用例並不涉及不同鍵的不同實現。我只使用類型族來避免本來是具有函數依賴關係的多參數類型類。 – ImAlsoGreg 2013-05-11 19:22:53
@ImAlsoGreg我衷心贊同避免使用多參數類型類/函數依賴關係。類型家庭更好。 – AndrewC 2013-05-11 20:54:40