モジュールを拡張したいが、プライベートコンポーネントにアクセスする必要がある。私はdouble
関数を定義して、新しいモジュールExt_nat
を定義したいと思いますOCamlでモジュール拡張のプライベートタイプを公開する
nat.mli:
type t
val zero : t
val succ : t -> t
nat.ml:
type t = int
let zero = 0
let succ x = x + 1
:ここでは例です。私はこのようなことをやろうとしていました。
ext_nat.mli:
include (module type of Nat)
val double : t -> t
ext_nat.ml:
include Nat
let double x = 2 * x
私は最後の行のx
の表現へのアクセスを持っていないように、それは働いていません。
私はこれについて考えていますが、とにかくこれがカプセル化を中断するのはnat
なのではないでしょう。では、これを行う最善の方法は何ですか?新しいモジュールnat_public
を定義することができます。ここでは、nat
とext_nat
をプライベートtype t
と定義しています。どう思いますか?