Estoy desarrollando algunos algoritmos en OCaml que requieren que algunas partes sean "conectables" para que parte del cálculo se deje en computadores específicos.Usar funtores como interfaces en OCaml
Sólo para dar un ejemplo supongamos que tengo una firma como ésta:
module type Algorithm = sig
val feed : float -> unit
val nth : int -> (float -> float)
end
Y dos implementaciones diferentes que serán Alg1
y Alg2
. Este módulo Algorithm
debe representar la interfaz para varias implementaciones como estas dos.
Ahora necesito otro componente, vamos a llamarlo Executor
que será el módulo que utiliza Alg1
o Alg2
throught su interfaz ..
La lectura sobre funtores parece que yo debería necesitar un funtor que toma un Algorithm
y produce a ConcreteExecutor
con una implementación específica del algoritmo que necesito. De modo que Executor
es un tipo de módulo que está parametrizado sobre uno de sus componentes ..
¿Estoy en lo cierto? ¿Es la mejor manera de obtener lo que necesito? Me pregunto si piensan así porque procedo de un fondo Java/C++, así que estoy acostumbrado a utilizar interfaces y clases abstractas y necesito entrar en este tema de abstracción de módulo/functor de la manera correcta.
¿Cuál es la sintaxis correcta para obtener lo que quiero?
Gracias de antemano
Este es realmente un gran uso de funtores. Los uso en una aplicación de generación de laberinto. Conecta un algoritmo y una representación de laberinto, y estás apagado. Todavía estoy trabajando en la salida que podría ser otro functor para soportar SVG, GraphViz, PDF y PNG. – nlucaroni
@nlucaroni: ¿el código de su aplicación de generación de laberinto está disponible en cualquier lugar? – aneccodeal