Subtyping은 한 유형의 표현이 주어지면 다른 유형도 제공 할 수 있다고 말합니다. 우리는 전자가 후자의 하위 유형이며이 하위 유형 관계는 다른 많은 관계를 유발한다고 말합니다. 기호에서
Γ ⊢ E: S에스< : TΓ ⊢ E: T
여기서 중요한 것은 (그리고 그것을 검토 한 이유는) 동일한 표현에 두 가지 유형이 있다는 것입니다. 암시 적 유형 인스턴스화를 사용하는 파라 메트릭 다형성 언어 에서는 다음과 같은 하위 유형 관계가 있습니다
. 모든 유형 T에 대해 . 시스템 F에서와 같이 유형 인스턴스화가 명시 적이면이 하위 유형 관계는 유지되지 않습니다.( ∀ α . τ) < : τ[ T/ α]티
{ ℓ1: A , ℓ2: B } < : { ℓ2: B , ℓ1: A }{ ℓ1: A , ℓ2: B } ≅{ ℓ2: B , ℓ1: A }에스≅티⟺에스< : T∧ T< : S{ ℓ1: A , ℓ2: B } = { ℓ2: B , ℓ1: A }티< : T
일반적으로 하위 유형이있는 언어에 대해 이야기 할 때 , 지면 유형, 즉 자유 변수가없는 유형 (물론, 비 지상 유형에 대한 하위 유형 관계를 생성 할 수있는 유형) 에 대한 사소한 하위 유형 관계를 가진 언어를 의미 합니다. 따라서 Roy 's와 같은 행 다형성이있는 시스템은 이러한 의미에서 하위 유형을 지정하는 언어가 아니지만 암시 적으로 인스턴스화 된 파라 메트릭 다형성 언어에서 비롯된 사소한 하위 유형 관계가 있습니다. 반면에 구조적 서브 타이핑은지면 유형에 대한 사소한 서브 타이핑 관계를 명시 적으로 나타냅니다.
( ≅)위에서 구조적 서브 타이핑은 행 유형을 의미하지만 그 반대도 마찬가지입니다. 파라 메트릭 다형성은 행 유형 또는 구조적 서브 타이핑에 직교합니다 (어떻게 가질 수도 있고 갖지 않을 수도 있다는 점에서 상호 작용이 있습니다). 구조적 서브 타이핑 + 파라 메트릭 다형성을 갖는 시스템은 후자의 모든 용어가 전자에서 동일한 타입으로 입력 될 수 있다는 의미에서 행 유형 + 파라 메트릭 다형성 (일종의 "레코드 유니온"을 가정)을 가정합니다. 전자는 추가 유형으로도 입력 할 수 있습니다. Brian의 예제를 사용하면 구조적 서브 answer
타이핑 및 파라 메트릭 다형성 이 있는 시스템 에서 행 타이핑 버전과 동일한 유형을 가지지 만 서브 타이핑 버전의 유형 도 있습니다 .
ρ{ c : Number }
정보 : 하위 유형에서 수퍼 유형으로 이동하면 (유형) 정보가 손실됩니다. 이것은 종종 당신이 원하는 것일 수 있습니다 : 당신이 관심있는 공통 유형이 있고 다른 모든 것은 관련이 없습니다. 내 편견은 가능한 한 많은 유형 정보를 유지하고 명시 적으로 버리는 것입니다. 하위 유형 지정 방식의 단점은 유형이 올바른 프로그램이지만 종종 유형이 정보가없는 "맨 위"유형 (예 : 빈 레코드)으로 푸시 되었기 때문에 증명됩니다. 반복적으로, 파라 메트릭 다형성 (일반적으로)은 유형 정보를 보존하고 부분적으로 입력하면 의도적으로 손실합니다.