我有以下情况:
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
它会产生一个模块,这两个东西都具体化了。有没有办法轻松获得?
由于函子语法很奇怪而且我还是新手,我不知道我所问的问题是否可以通过简单的方式解决。
提前致谢