, 나는 내가 (아마도 역효과) OOP의 은유를 사용할 때 이것은 나에게 의미가 예를클래스, 연관된 패밀리 -> 컨테이너, 키 및 요소 : 누가 누구입니까? 를 수집의 인스턴스는 관련 유형 (동의어) Elem 모델의 CE가 -에 대한 <a href="http://www.haskell.org/haskellwiki/GHC/Indexed_types" rel="nofollow">type families on haskellwiki</a> 읽기
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
지도는 대 수집하고 대와 KS보다 '더 큰'느낀다. GMapKey와 연관된 GMap이있는 것처럼 보입니다. 관계가 다른 방향으로 갈 것으로 예상됩니다.
데이터 패밀리와 유형 동의어 패밀리 중 하나를 선택할 때 따라야 할 패턴입니까 (데이터 패밀리 : 컨테이너가 연관된 유형, 동의어 계열 유형 : 요소가 연관된 유형)? 또는 IS A/HAS A 구분이 부적절하며 두 예제가 서로 바뀔 수 있습니까? GMap
가족 k
와 연결되어, 당신은 GMapKey
로 사용 k
에 대한 k
과 관련된 GMap
형 가족 인스턴스가 있어야합니다
감사합니다. 루이, 그 말이 완벽합니다. 나 앞에서 유스 케이스가 다른 키에 대한 다른 구현을 포함하지 않기 때문에이 지점을 놓친 것일 수 있습니다. 필자는 타입 패밀리를 사용하여 함수 종속성이있는 다중 매개 변수 유형 클래스가 아닌 것을 피할 수 있습니다. – ImAlsoGreg
@ImAlsoGreg 나는 multiparameter 유형 클래스/함수 종속성을 피하는 것에 진심으로 동의합니다. 타입 패밀리는 훨씬 좋네요. – AndrewC