14

我有以下情况:

module type M = sig type s = ...  end

module Make(P: Something) : (M with type s = P.t) = struct
   type s = P.t
   ...
end

这可以很好地生成类型模块,这些模块在其实现M中使用类型模块的特定实现。Something

现在假设我有另一个模块定义为

module type AU = sig
  val feed : float -> unitv
  val nth : int -> (float -> float)
  val reset : unit -> unit
end

有各种实现

module SUAlg : AU = struct ... end
module MLAlg : AU = struct ... end
module ACEAlg : AU = struct ... end

问题的关键是M模块现在应该在两件事上参数化:一个Something模块和一个AU模块,这样它就像

module Make(P: Something) : (M with type s = P.t) = struct
   type s = P.t
   module Alg = MLAlg (* just an example *)
   ...
end

但我想有一个给定 aSomething和给定 a 的通用函子,AU它会产生一个模块,这两个东西都具体化了。有没有办法轻松获得?

由于函子语法很奇怪而且我还是新手,我不知道我所问的问题是否可以通过简单的方式解决。

提前致谢

4

1 回答 1

20
于 2010-08-21T14:11:48.290 回答