आप नहीं कर सकते हैं, जहाँ तक मैं बता सकता है। जब आप मॉड्यूल को परिभाषित
module type AA =
sig
module B : sig type t end
type t
val f : unit -> B.t
end
module type BB =
sig
module A : sig type t end
type t
val g : unit -> A.t
end
और फिर परिशोधित करें:: निकटतम समाधान क्या वास्तव में प्रत्येक हस्ताक्षर व्यक्त करने के लिए आवश्यक है करने के लिए "पुनरावर्ती" बिट्स सीमित करने के लिए है
module rec A : AA with module B = B =
struct
module B = B
type t = int
let f() = B.g()
end
and B : BB with module A = A =
struct
module A = A
type t = int
let g() = A.f()
end
Fwiw, एक सोच सकते हैं कि यह पुनरावर्ती मॉड्यूल का उपयोग करके पुनरावर्ती हस्ताक्षर (बहुत दोहराव के साथ) को व्यक्त करने के लिए संभव होना चाहिए:
module rec AA :
sig
module type T = sig module B : BB.T end
end =
struct
module type T = sig module B : BB.T end
end
and BB :
sig
module type T = sig module A : AA.T end
end =
struct
module type T = sig module A : AA.T end
end
हालांकि, वह काम नहीं करता:
Error: Unbound module type BB.T
स्रोत
2012-01-30 14:21:10
आपके लिए धन्यवाद उत्तर ... 'निकटतम समाधान "रिकर्सिव" बिट्स को सीमित करना है ==> क्या आप कृपया अपने समाधान की सीमाओं के बारे में विस्तार से बता सकते हैं? – SoftTimur
ठीक है, यह आपको हस्ताक्षर के बीच मनमाने ढंग से रिकर्सन व्यक्त करने की अनुमति नहीं देता है, क्योंकि आपको प्रत्येक हस्ताक्षर के एक आत्मनिर्भर सबसेट को अलग-अलग घोषणा के रूप में अलग करने में सक्षम होना चाहिए। साथ ही, आप उन सभी सबसेट को दो स्थानों पर दोहरा रहे हैं - लेकिन नामकरण और 'इन्हें शामिल करना' वहां मदद कर सकता है। मेरे जवाब में मैंने ऐसा करने के लिए परेशान नहीं किया, क्योंकि प्रासंगिक सबसेट (टाइप टी) काफी छोटे हैं। –