Ich habe die folgende Situation:Funktoren mit mehreren Argumenten in OCaml
module type M = sig type s = ... end
module Make(P: Something) : (M with type s = P.t) = struct
type s = P.t
...
end
, die zur Erzeugung von Modulen M
Art funktioniert gut, die spezifische Implementierung von Modulen des Typs verwenden Something
innerhalb deren Umsetzung.
Nehmen wir nun an habe ich ein anderes Modul definiert als
module type AU = sig
val feed : float -> unitv
val nth : int -> (float -> float)
val reset : unit -> unit
end
, dass verschiedene Implementierungen
module SUAlg : AU = struct ... end
module MLAlg : AU = struct ... end
module ACEAlg : AU = struct ... end
Der Punkt der Frage hat, ist, dass das M
Modul sollte jetzt über zwei Dinge parametrisiert werden: a Something
Modul und ein AU
Modul, so dass es so etwas wie
module Make(P: Something) : (M with type s = P.t) = struct
type s = P.t
module Alg = MLAlg (* just an example *)
...
end
ist
aber ich hätte gerne einen generischen Funktor, der eine Something
gegeben und eine AU
gibt es ein Modul mit beiden Dingen konkretisiert. Gibt es einen Weg, das leicht zu erreichen?
Da Funktorsyntax ziemlich seltsam ist und ich noch neu bin, weiß ich nicht, ob das, was ich frage, auf einfache Weise gelöst werden kann oder nicht.
Vielen Dank im Voraus
Gibt es eine andere Syntax für die Übergabe von Argumenten in den Funktor? Make_LOffset (arg1 arg2)? – stumped
@stumped Nun, die Argumente wären Modul, also würden sie wie "Arg1" und "Arg2" aussehen. Die Syntax lautet 'Make_LOffset (Arg1) (Arg2)'. Ich habe die Antwort aktualisiert. –