Я такая ситуация:функторов с несколькими аргументами в OCaml
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
, но я хотел бы иметь общий функтор, который задал Something
и дал AU
, он производит модуль с обеими конкретизированными вещами. Есть ли способ получить это легко?
Поскольку синтаксис функтора довольно странный, и я все еще новичок в этом, я не знаю, может ли то, что я прошу, решить простым способом или нет.
Заранее благодарен
Есть ли другой синтаксис для передачи аргументов в функтор? Make_LOffset (arg1 arg2)? – stumped
@stumped Ну аргументы будут модулем, поэтому они будут выглядеть как «Arg1» и «Arg2». Синтаксис: 'Make_LOffset (Arg1) (Arg2)'. Я обновил ответ. –