this 질문에서 태그가 지정되지 않은 공용체는 하위 유형 지정의 한 형태로 설명됩니다.태그가 지정되지 않은 공용체가 유형 클래스를 허용하는 것과 동등한 것을 허용합니까?
유형 클래스도 하위 유형 지정의 양식입니다.
개념적으로 동일합니까? 저도 그렇습니다. 하스켈에서 어떻게 구현합니까?
this 질문에서 태그가 지정되지 않은 공용체는 하위 유형 지정의 한 형태로 설명됩니다.태그가 지정되지 않은 공용체가 유형 클래스를 허용하는 것과 동등한 것을 허용합니까?
유형 클래스도 하위 유형 지정의 양식입니다.
개념적으로 동일합니까? 저도 그렇습니다. 하스켈에서 어떻게 구현합니까?
유형 클래스도 하위 유형 지정의 한 형태입니다.
아니요. 그림을 위해 들어, 내가 그 질문에 언급 TypeScript examples로 돌아가 보자
우리는 노동 조합 유형이 값이 있다면, 우리가 할 수있는 노동 조합의 모든 유형에 공통되는 전용 액세스 회원 .
interface Bird { fly(); layEggs(); } interface Fish { swim(); layEggs(); } function getSmallPet(): Fish | Bird { // ... } let pet = getSmallPet(); pet.layEggs(); // okay pet.swim(); // errors
여기, getSmallPet
의 반환 형식은 Fish
도 Bird
하지만 Fish
및 Bird
모두 회원 일반 회원으로 가지고 그 둘의 슈퍼 아닙니다. Fish
은 이고은 Fish | Bird
이며, 따라서 Bird
입니다. 타입 클래스와 어떻게됩니까
는 매우 다르다 :
foo :: Num a => a -> a
foo x = (x * x) + x
동안 (3 :: Integer)
및 (7.7 :: Double)
도 가지고 Num
에 해당하는 슈퍼가 의미하지 않는다 모두 foo (3 :: Integer)
및 foo (7.7 :: Double)
작품. 대신 Num a => a -> a
에 따르면 a
을 선택하면 Num
의 인스턴스가 있어야하며 Num
은 유형이 아니므로 해당 유형의 (*)
및 (+)
의 적절한 구현이 있도록 강조해야합니다. OOP 메소드와 달리 (*)
및 (+)
은 특정 유형에 속하지 않으므로 Integer
및 Double
과 함께 사용하려면 상위 유형을 도입 할 필요가 없습니다.
이 답변은 많은 도움이됩니다. 감사합니다. 그럼에도 불구하고 나는'Pet' 예제가 타입 클래스를 통해 구현 될 수 있기 때문에 두 개념이 적어도 관련되어 있다는 느낌을 가지고있다. 질문 : "형식 클래스 제약 조건은 태그가없는 노동 조합만큼 강력합니까?" (이것은 아마도 후속 질문으로 더 적합 할지라도). – ThreeFx
@ThreeFx 우리는이 경우 동일한 목표를 달성하는 두 가지 매우 다른 방법이라고 말할 수 있습니다.그런데 TypeScript 예제에서 '물고기'와 '새'가 확장되는'layEggs' 메소드를 가진'Oviparous' 인터페이스가 있다면, 태그없는 부분은 토론에 필수적이지 않다는 점은 주목할 가치가 있습니다 근본적인 차이점은 동일하게 유지됩니다. 관련있는, 다소 접선 인 질문 : [* 파라 메트릭 다형성 대 Ad-hoc 다형성 *] (http://stackoverflow.com/q/6730126/2751851). – duplode
하스켈은 모든 값이 정확히 _one_ 타입이기 때문에 전통적으로 정의 된 바와 같이 하스켈에는 하위 유형 지정이 없다고 주장합니다. Typeclasses는 유형 정의 언어를 확장하여 사용자 정의 다형성을 허용하는 단순한 방법입니다. 즉,'x' 값은'C a => a' 타입을 가지며,'C'는'a' 규칙을 준수해야합니다. 그러나 여전히'x'는 정확하게 하나의 타입을 가지고 있습니다. 'x' 값이 여러 유형, 즉 기본 유형 및 기본 유형에서 서브 클래스 인 모든 유형이있는 OOPy 부속 유형 지정과 대조하십시오. – hao
또 다른, 좀 더 근심스러운 주장 : 서브 타입 화는 Haskell 컴파일러가 가지고있는 DHM 스타일의 주요 유형 유추를 금지하는 반면, typeclasses는 그렇지 않습니다. – hao
@ haoformayor의 요점을 상세히 설명하십시오 : 하위 유형 지정과 임시 비정상을 혼동하지 마십시오. 서브 타이핑은 임의 (Ad-hoc) 다형성의 한 가지 특징이며 유형 클래스는 다소 다른 것입니다. –