चलो कहते हैं कि मैं एक मॉड्यूल M
एक मॉड्यूल F
द्वारा parameterized करते हैं:कैसे एक मॉड्यूल हस्ताक्षर जिसका मॉड्यूल कार्यान्वयन एक functor द्वारा parameterized है परिभाषित करने
module M (F : sig type id type data end) =
struct
type idtype = F.id
type datatype = F.data
type component = { id : idtype; data : datatype }
let create id data = { id; data }
let get_comp_data comp = comp.data
let get_comp_id comp = comp.id
end
इसलिए मैं इसे इस तरह का उपयोग करें:
module F1 = struct type id = int type data = float end
module MF1 = M(F1)
let comp = MF1.create 2 5.0
let id = MF1.get_comp_id comp
अब, अगर मैं हस्ताक्षर S
से मिलान करने के लिए M
चाहता हूं:
module type S =
sig
type idtype
type datatype
type component
val create : idtype -> datatype -> component
val get_comp_data : component -> datatype
val get_comp_id : component -> idtype
end
module F1 = struct type id = int type data = float end
module MF1 = (M(F1) : S)
let comp = MF1.create 2 5.0
let id = MF1.get_comp_id comp
get_comp_data
और get_comp_id
को परिभाषित करने के लिए मुझे यहां परेशान करता है, मुझे idtype
और datatype
मॉड्यूल S
में निर्दिष्ट करने की आवश्यकता है; अब कल्पना करें कि मेरे पास अन्य प्रकार के M
में अपने प्रकार के प्रकार हैं, मेरे पास S
में निर्दिष्ट करने के लिए एक दर्जन प्रकार होंगे? क्या इससे बचने का कोई आसान तरीका है?
पता नहीं था आप एक ही नाम के साथ एक और मॉड्यूल में एक मॉड्यूल जगह कर सकते हैं; बुरा – codablank1