문제

내가 비틀 거리는 정의는 동일한 아이디어를 표현한다는 것을 나타냅니다. 그것이 레코드 유형 간의 관계는 이름이 아닌 해당 필드 (또는 속성)에 의해 결정됩니다. 그들의 Wikipedia 페이지는 또한 동일한 아이디어를 나타내는 것처럼 보입니다 :

a 구조 유형 시스템 (또는 속성 기반 유형 시스템)은 주요 클래스입니다. 유형의 호환성 및 동등성이 유형의 실제 구조 또는 정의에 의해 결정되는 유형 시스템 또는 선언의 이름이나 선언 장소와 같은 다른 특성에 의해 결정됩니다.

프로그래밍 언어 유형 이론, 행 다형성 는 하나의 다형성입니다. 레코드 필드 유형 (행이라고도 함, 행 다형성이라고도 함)에서 다형성 인 프로그램을 작성하십시오.

이들 사이에 차이가 있습니까?

도움이 되었습니까?

해결책

구조 유형 시스템은 반드시 기록과 관련이 없습니다. 예를 들어 시스템을 가질 수 있습니다 :

data Bool = False | True
data Two = Zero | One
.

는 실제로 두 가지 유니지 생성자가있는 두 가지 유형이기 때문에 동일한 유형입니다. 또한 유형이 구조에 의해 결정될 때도 두 가지 레코드 인

라는 두 가지 레코드에 대해서도 기록에 대해 많이 알려주지는 않습니다.
{s : S ; t : T}
{s : S ; t : T ; u : U}
.

는 동일한 구조가 아니므 로이 두 가지 유형에 대해 편리한 것이 없으면 구조적 타이핑을 할 수 있습니다.

마찬가지로, 격리 된 행 다형성은 당신이 줄을 정량화 할 수 있고, 아마도 그들을 예를 들면서 사용할 수 있습니다. 행에 의해 매개 변수화 된 레코드 유형입니다. 그러나 시스템의 기능을 실제로 지정하는 행을 사용하여 할 수있는 모든 종류의 변형이 있습니다.

일반적으로 구조 기록을 가진 사람들은 적어도 하위 유형을 원합니다. 위의 두 번째 레코드 유형이 처음으로 첫 번째 레코드 유형이므로 후자를 전 기대하는 모든 것으로 전달할 수 있도록 할 수 있습니다. 행 다형성 으로이 작업을 수행하는 일반적인 방법은 대신 현재 필드를 정량화하고 일종의 행 연결을 사용하는 것입니다.

더 많은 목표의 질문은 하위 타이핑과 정량화의 차이점입니다. 그것에 대한 답은 일반적으로 정량화 된 변수가 독점적으로 통상적으로 또는 위탁되지 않는 한 정량화 된 유형을 표현할 수 없다는 것입니다. 그래서 우리는 말할 수 있습니다 :

(forall a. a -> T) ~= Top -> T
(forall a. T -> a) ~= T -> Bot
.

그러나 forall a. a -> a와 같은 유형의 경우 정보를 잃지 않고 a를 선택할 수있는 한 가지 유형이 없습니다.

이는 question vs. (적절한) 행 다형성을 기록한 시스템으로 시스템으로 확장됩니다. 그러나 하위 타이핑 및 양자화기가있는 시스템이있는 경우 정량화 유형에는 하위 유형이 적용될 수 있으면 차이가 훨씬 미묘 할 수 있습니다. 정액제와 부조화가 두 가지가 있지만 (행 다형성이 쉽지 않음, 둘 중 하나가 아니라)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 cs.stackexchange
scroll top