He la siguiente situación:Functors con múltiples argumentos en OCaml
module type M = sig type s = ... end
module Make(P: Something) : (M with type s = P.t) = struct
type s = P.t
...
end
que funciona bien para generar módulos de M
tipo que utilizan la aplicación específica de los módulos de tipo Something
dentro de su aplicación.
Ahora supongamos que tengo otro módulo definido como
module type AU = sig
val feed : float -> unitv
val nth : int -> (float -> float)
val reset : unit -> unit
end
que tiene varias implementaciones
module SUAlg : AU = struct ... end
module MLAlg : AU = struct ... end
module ACEAlg : AU = struct ... end
El punto de la cuestión es que el módulo M
debe ser parametrizada en dos cosas ahora: un Something
módulo y un módulo AU
para que sea algo así como
module Make(P: Something) : (M with type s = P.t) = struct
type s = P.t
module Alg = MLAlg (* just an example *)
...
end
pero me gustaría tener un functor genérico que, dado un Something
y dado un AU
, produzca un módulo con ambas cosas concretizadas. ¿Hay alguna manera de obtener eso fácilmente?
Como la sintaxis de functor es bastante extraña y todavía soy nuevo, no sé si lo que estoy pidiendo se puede resolver de una manera sencilla o no.
Gracias de antemano
¿Hay una sintaxis diferente para pasar argumentos al funtor? Make_LOffset (arg1 arg2)? – stumped
@stumped Bueno, los argumentos serían del módulo, por lo que se verían como 'Arg1' y' Arg2'. La sintaxis es 'Make_LOffset (Arg1) (Arg2)'. He actualizado la respuesta. –