ocaml 언어 사양에는 짧은 섹션이 있습니다.ocaml은 무엇을 입력합니까? 'a ->'뜻?
poly-typexpr ::= typexpr
| { ' ident }+ . typexpr
텍스트에는 설명이 없으며 poly-typexpr
의 유일한 인스턴스는 메소드 유형을 정의하는 데 있습니다.
method-type ::= method-name : poly-typexpr
나 할래?
ocaml 언어 사양에는 짧은 섹션이 있습니다.ocaml은 무엇을 입력합니까? 'a ->'뜻?
poly-typexpr ::= typexpr
| { ' ident }+ . typexpr
텍스트에는 설명이 없으며 poly-typexpr
의 유일한 인스턴스는 메소드 유형을 정의하는 데 있습니다.
method-type ::= method-name : poly-typexpr
나 할래?
poly-typexpr
또한 레코드 필드의 유형으로 사용할 수 있습니다 (Section 6.8.1 참조). some debate on that point이 있지만 일반적으로 "실존 유형"이라고합니다. 이 방법으로 다형성 유형을 사용하면 유형 변수의 범위가 변경됩니다. 예를 들어, 유형 비교 :
type 'a t = { f : 'a -> int; }
type u = { g : 'a. 'a -> int; }
t
정말 유형의 가족, 'a
의 각각의 가능한 값입니다. 'a t
유형의 각 값은 'a -> int
유형의 f
필드를 가져야합니다. 예 :
# let x = { f = fun i -> i+1; } ;;
val x : int t = {f = <fun>}
# let y = { f = String.length; } ;;
val y : string t = {f = <fun>}
비교해 보면 u
은 단일 유형입니다. u
유형의 각 값은 의 경우 'a -> int
인 모든 필드가 g
이고'a
인 필드가 있어야합니다. 예를 들면 : g
전혀 입력의 종류에 의존하지 않는 것을 여기
# let z = { g = fun _ -> 0; } ;;
val z : u = {g = <fun>}
참고; 그럴 경우에는 'a. 'a -> int
유형이 아닙니다. 예 :
# let x2 = { g = fun i -> i+1; } ;;
This field value has type int -> int which is less general than 'a. 'a -> int
section 3.11 "Polymorphic methods"을 참조하십시오. "물론 제약 조건이 명시적인 메서드 유형 일 수도 있습니다 ..."