Okazuje się że Type Classes i Multi-parameter type class to dopiero wierzchołek góry lodowej :(
Ale do rzeczy. Chciałbym w Haskellu zamodelować interfejs
kolekcji. Mam do wyboru dwa rozwiązania:
Klasyczne, oparte na Functional dependencies:
class Collects e ce | ce -> e where
empty :: ce
insert :: e -> ce -> ce
member :: e -> ce -> Bool
toList :: ce -> [e]
Nowsze, oparte na Type families:
class Collects ce where
type Elem ce
empty :: ce
insert :: Elem ce -> ce -> ce
member :: Elem ce -> ce -> Bool
toList :: ce -> [Elem ce]
Czy ktoś wie jakie są różnice funkcjonalności między tymi dwoma rozwiazaniami? Jedyne porównanie jakie znalazłem (na razie) to Functional dependencies vs. type families. Z tego co zrozumiałem to Type Families są szybsze, ale bardziej rozwlekłe w deklaracji
Z góry dziękuję za pomoć