3
module F (M : sig
type t = [> `Foo ]
end) = struct
type t = [ M.t | `Bar ]
end
내가 뭘 잘못 나에게
Error: A type variable is unbound in this type declaration.
In type [> `Foo ] as 'a the variable 'a is unbound
를 얻을 컴파일하려고? [> `Foo]
은 공개 유형이고 암시 적으로 유형 변수를 포함하므로
필자의 functor 인수'M'가 서명에 지정되지 않은 추가 변형을 사용하여'F.t'를 확장 할 수 있기를 바랍니다. 예 : 'type t = [\'Foo | \'Baz]'. 그래서 폐쇄 형이 효과가 있다고 생각하지 않습니다. 내가 할 수있는 일이 가능한거야? 또한 공개 된 유형에 유형 변수가 포함 된 이유에 대해 명확하지 않습니다. 설명 할 수 있습니까? 설명에 연결할 수 있습니까? RWO는 암시 적 타입 변수에 대해서는 언급하지 않습니다. – int3
''유형 t = [>'Baz | Mt]''는 당신이 원하는 것입니다; 여기서'Mt'는 닫을 수 있습니다. – camlspotter
"암시 적 타입 변수"는 공식 OCaml 단어가 아닙니다. OCaml에서 인스턴스화 할 수있는 모든 것은 유형 변수를 가져야합니다. 예를 들어 열린 다 변수 형''[>'A | 'B '''그리고 열린 객체 타입''. 그러나 다른 곳에서 사용하지 않는다면 그것들을 생략 할 수 있습니다. 실제로 제약 조건을 가진 타입 변수를 작성하는 짧은 방법입니다 :'' 'a constraint'a = [>'A | 'B '''와''a = '과 같은 제약 조건을 사용합니다. 그것들은 제약 조건의 하위 유형에만 인스턴스화 할 수 있습니다. (''[>'A |'B]를 'a'로, ''을 'a'로 쓰면됩니다.) –
camlspotter