Skip to content

Latest commit

 

History

History
56 lines (42 loc) · 1.07 KB

File metadata and controls

56 lines (42 loc) · 1.07 KB

packed module の中とオリジナルは違う

(* x.ml *)
type t = Foo

P というモジュールにパックする事前提でコンパイルします:

$ ocamlc -for-pack P x.ml

x.cmop.cmo にパック。 P.X というモジュールを含む p.cmo を作ります:

$ ocamlc -pack -o p.cmo x.cmo

さて、 X.tP.X.t は同じようで違うというのが本稿の話:

(* y.ml *)
let ts = [ X.Foo; P.X.Foo ] (* X.t と P.X.t は違うという型エラー *)

あいやー。

Pack というと

module P : sig
  module X : sig 
    type t = X.t = Foo 
  end
end = struct
  module X = X
end

という物を期待していたのですが、どうも

module P : sig
  module X : sig 
    type t = Foo  (* 元の X.t との関係は見えない *)
  end
end = struct
  module X = X
end

という扱いみたい。

「一旦 pack したら pack したモジュールを介して使え、直接さわるな」って事でいいんですかね。