OCaml でレコード型を強制できないのはなぜですか? のような基本型は正常にint動作します。
M以下は、 moduleに含める基本モジュールを構築する例ですA。M.tは で省略されたタイプですA。M.tある限りint、私はできますA.t' :> M.t。に変更すると{i : int}、コンパイラはサブタイプではないと言います。これには非常に具体的な理由があると思いますか?
module M = struct
type t = {i : int}
let make () = {i = 10}
end
module A : sig
include module type of M
type t' = private t
val make : unit -> t'
end = struct
include M
type t' = t
end
トップレベルで:
(A.make() :> M.t);;
Error: Type A.t' is not a subtype of M.t