2012-03-23 7 views
5

¿Cuál es la forma convencional de crear una interfaz en OCaml? Es posible tener una interfaz con una única implementación creando un archivo de interfaz foo.mli y un archivo de implementación foo.ml, pero ¿cómo se pueden crear múltiples implementaciones para la misma interfaz?Interfaz con varias implementaciones en OCaml

Respuesta

5

Si va a tener varias implementaciones para la misma firma, defina su firma dentro de una unidad de compilación, en lugar de como una unidad de compilación, y (si es necesario) de manera similar para los módulos. Hay un ejemplo de ello en la biblioteca estándar: la firma OrderedType, que describe los módulos con un tipo y una función de comparación de ese tipo:

module type OrderedType = sig 
    type t 
    val compare : t -> t -> int 
end 

Esta firma se define en tanto set.mli y map.mli (se puede hacer referencia a ella como Set.OrderedType o Map.OrderedType, o incluso puede escribirlo usted mismo: las firmas son estructurales). Hay varias unidades de compilación en la biblioteca estándar que tienen esta firma (String, Nativeint, etc.). También puede definir su propio módulo, y no necesita hacer nada especial al definir el módulo: siempre que tenga un tipo llamado t y un valor llamado compare del tipo t -> t -> int, el módulo tiene esa firma. Hay un ejemplo ligeramente elaborado de eso en la biblioteca estándar: el functor Set.Make construye un módulo que tiene la firma OrderedType, por lo que puede construir conjuntos de conjuntos de esa manera.

(* All four modules passed as arguments to Set.Make have the signature Set.OrderedType *) 
module IntSet = Set.Make(module type t = int val compare = Pervasives.compare end) 
module StringSet = Set.Make(String) 
module StringSetSet = Set.Make(StringSet) 
module IntSetSet = Set.Make(IntSet) 
9

Debe usar módulos y firmas. Un archivo .ml define implícitamente un módulo y un .mli es su firma. Con módulos explícitos y firma, puede aplicar una firma a varios módulos diferentes.

Consulte this chapter del libro en línea "Desarrollo de aplicaciones con OCaml".

+0

Muchas gracias por el enlace del libro. Fue muy útil en más de un sentido. –

Cuestiones relacionadas