2016-12-12 1 views
6

coursera 함수 프로그래밍 과정에서 나는 미묘한 개념을 발견했습니다. 함수 유형 간의 서브 타이핑

경우 A2 < : A1B1 < : B2 다음 (A1 => B1) < (A2 => B2)

정당성

  • 때 우리는 A2에 인수를 전달하고 subtyping 관계 때문에 동일한 인수를 A1에 전달할 수 있습니다.
  • 다음 적용 함수 A1 => B1
  • 그런 다음 함수 B1을 부여하고 있기 때문에, 우리는 이것에 대한 벤 다이어그램을 그리면 B2

자격 하위 유형의

  • 도면 1 diagram 1

  • 도 2 diagram 2

    • 어느 것이 올바른 다이어그램입니까?
    • 어떻게 그 벤 다이어그램을 사용하여 결과를 설명 할 수 있습니까?

참조 : Youtube video

덕분 함수 F1 들어 F2

대한 F1 및 (A2 => B2) 용

답변

4

하자 호 (A1 => B1) 다른 함수 F2의 하위 유형이므로 F2 대신 인수 시스템을 사용해야합니다.

인수 A의 하위 유형은 A를 허용하지만 상위 유형은 허용하지 않는 함수로 전달할 수 있습니다. 즉, F1이 F2의 부속 유형이 되려면 F2가 인수로 허용하는 모든 것을 승인해야하므로 A1은 A2의 수퍼 유형이어야합니다.

한편, F1의 출력은 적어도 F2의 출력만큼 ​​상세해야하므로 F2의 출력을 사용할 수있는 곳이면 어디서든 사용할 수 있습니다. 즉, B1은 B2의 부속 유형이어야합니다.

나는 다이어그램이 어떻게 서로 어울리는지를 시각화하는 좋은 방법이라고 확신하지는 않지만 두 가지 중에서 다이어그램 1이 가장 정확한 것이라고 말할 수 있습니다. 예에서

살펴 보자 : 그것이 F1 대신에 사용할 수 있기 때문에 당신이 f1(s: Set): Set 다음 f2(s: Iterable): SortedSet는 F1의 하위 유형 인 기능을 가지고 말.

f1의 인수는 Set 또는 Set의 모든 하위 유형이어야합니다. 이 모든 주장은 f2에서도 유효합니다. f1의 출력은 Set이므로 f2의 출력은 Set으로 사용할 수 있어야합니다. SortedSetSet의 하위 유형이므로이 또한 사실입니다.