【发布时间】:2017-09-01 11:03:36
【问题描述】:
我想扩展一个模块,但我需要访问它的私有组件。这是一个例子:
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,它定义了一个double 函数。我试图做这样的事情。
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,其中type t = int,并使用私有type t 定义nat 和ext_nat。你怎么看?
【问题讨论】:
标签: module ocaml encapsulation inclusion