ho definito 2 moduli Zone
e Zones
, Zones
è una lista di Zone
, delle funzioni Causa di Zones
bisogno di richiamare le funzioni di Zone
:Un disegno di funtori in OCaml
module Zone = struct
type t =
{ ...
prop: bool }
...
end
modules Zones = struct
type t =
| ZSbot
| ZS of Zone.t list
| ZStop
...
end
Un principio di file all.ml
utilizza Zones
e i moduli Mis
, mis.ml
contengono funzioni che funzionano su entrambi Zone.t
e Zones.t
, ad esempio val Mis.make : Zone.t -> Zones.t
.
open Zones
open Mis
type t = { zs: Zones.t }
...
Mis.make z
Ora, vorrei avere più opzioni per la prop
di Zone
. Quindi definisco un'interfaccia PROPERTY
e 2 moduli Type
e Formula
corrispondenti, in modo da poter rendere functors per Zone
e altri dove ... prop: Property.t ...
. Ora posso immaginare diverse possibilità per il nuovo all.ml
:
(* 1 *)
open Zones
module ZonesType = ZonesFun(Type)
module ZonesFormula = ZonesFun(Formula)
type t = { zstype: ZonesType.t; zsformula: ZonesFormula }
(* 3 *)
open Zones
module ZonesType = ZonesFun(ZoneFun(Type))
module ZonesFormula = ZonesFun(ZoneFun(Formula))
type t = { zstype: ZonesType.t; zsformula: ZonesFormula }
(* 4 *)
open Zones
module ZoneType = ZoneFun(Type)
module ZoneFormula = ZoneFun(Formula)
module ZonesType = ZonesFun(ZoneType)
module ZonesFormula = ZonesFun(ZoneFormula)
type t = { zstype: ZonesType.t; zsformula: ZonesFormula }
Anche se le firme di ZonesFun
e ZoneFun
sono diversi tra le 3 opzioni, questa implementazione può assicurarsi ZoneXXX.t
e ZonesXXX.t
sono coerente. Ora un grande problema è come cambiare Mis
:
1) Se faccio un funtore MisFun: PROPERTY -> MIS
, e crea il ZoneXXX
e ZonesXXX
all'interno. Non può sapere che MisXXX.Zone.t
è uguale a Zone.t
di all.ml
o MisXXX.Zones.t
corrisponde a Zones.t
di all.ml
.
2) Se eseguo un functor MisFun: Zone -> Zones -> MIS
, non è possibile sapere che MisXXX.Zone.t
e MisXXX.Zones.t
sono coerenti.
Qualcuno sa come risolvere entrambi 1) e 2)?
In opzione (1), 'ZoneFun' viene applicata all'interno' ZonesFun'. – SoftTimur
Ho aggiornato l'OP, è più complicato di quello che pensavamo ... – SoftTimur
Vedere il mio secondo aggiornamento per una risposta più ampia. –