मैं 2 मॉड्यूल Zone
और Zones
परिभाषित किया है, Zones
Zones
के कारण कार्यों के Zone
की एक सूची, Zone
के कार्यों कॉल करने की आवश्यकता है और Mis
मॉड्यूल, mis.ml
में ऐसे कार्य शामिल हैं जो Zone.t
और Zones.t
दोनों पर काम करते हैं, उदाहरण के लिए val Mis.make : Zone.t -> Zones.t
।OCaml में functors का एक डिजाइन
open Zones
open Mis
type t = { zs: Zones.t }
...
Mis.make z
अब, मैं Zone
की prop
के लिए अधिक विकल्प हैं करना चाहते हैं। इसलिए मैं एक इंटरफ़ेस PROPERTY
और 2 मॉड्यूल Type
और Formula
से मेल खाता हूं, ताकि मैं Zone
और अन्य ... prop: Property.t ...
के लिए मजेदार बना सकूं। अब मैं नई 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 }
हालांकि ZonesFun
और ZoneFun
के हस्ताक्षर 3 विकल्प के बीच अलग-अलग हैं, इसलिए ऐसा करना सुनिश्चित करें ZoneXXX.t
और ZonesXXX.t
सुसंगत हो गए हैं। अब एक बड़ी समस्या Mis
परिवर्तित करने का तरीका है:
1) अगर मैं एक functor MisFun: PROPERTY -> MIS
बनाने के लिए, और अंदर ZoneXXX
और ZonesXXX
निर्माण। यह MisXXX.Zone.t
all.ml
के समान नहीं है, या MisXXX.Zones.t
all.ml
के Zones.t
के समान है।
2) यदि मैं एक मजेदार MisFun: Zone -> Zones -> MIS
बनाता हूं, तो यह MisXXX.Zone.t
और MisXXX.Zones.t
सुसंगत नहीं हो सकता है।
क्या कोई जानता है कि दोनों को कैसे हल करें 1) और 2)?
विकल्प में (1), '' ZoneFun' ZonesFun' अंदर लागू किया जाता है: तो फिर तुम
Misc
functor के अतिरिक्त पैरामीटर मेंZone
औरZones
बदल सकते हैं। – SoftTimurमैंने ओपी को अपडेट किया है, यह हमने जो सोचा था उससे कहीं अधिक जटिल है ... – SoftTimur
अधिक व्यापक उत्तर के लिए मेरा दूसरा अपडेट देखें। –