이 프로그램을 컴파일 :유형 공유 - typechecker 오류
module type Inc =
sig
type t
val inc : t -> t
end
module type Dec =
sig
type t
val dec : t -> t
end
module Merger (I : Inc) (D : Dec with type t = I.t) =
struct
let merge x = x |> I.inc |> D.dec
end
module IntInc : Inc =
struct
type t = int
let inc x = x + 10
end
module IntDec : Dec =
struct
type t = int
let dec x = x - 8
end
module Combiner = Merger (IntInc) (IntDec)
나는 다음과 같은 오류 얻을 :
File "simple.ml", line 30, characters 35-41:
Error: Signature mismatch:
Modules do not match:
sig type t = IntDec.t val dec : t -> t end
is not included in
sig type t = IntInc.t val dec : t -> t end
Type declarations do not match:
type t = IntDec.t
is not included in
type t = IntInc.t
File "simple.ml", line 13, characters 38-50: Expected declaration
File "simple.ml", line 9, characters 13-14: Actual declaration
내가 D : Dec with type t = I.t
제약이 D.t = I.t
을 보장한다고 생각합니다. 왜 그렇지 않은가?
더 재미있는 것은 module Combiner = Merger (IntInc) (IntDec)
행을 제거하면 오류없이 컴파일됩니다.
제 질문은 : 내가 뭘 잘못하고있는거야?
위대한 설명, 고마워. – KCH