जेफरी के जवाब पर निर्माण करने के लिए, कारण डेवलपर्स यहाँ covariant के रूप में सार प्रकार अंकन का काम किया है की संभावना नहीं है मदद से आप subtyping उपयोग (अनिवार्य रूप से कोई भी नहीं OCaml में subtyping का उपयोग करता है, पैरामीट्रिक polymorphis आम तौर पर पसंद किया जाता है के रूप में), लेकिन "आराम मूल्य प्रतिबंध" नामक प्रकार प्रणाली के एक कम-से-कम ज्ञात पहलू का उपयोग करने के लिए धन्यवाद, जिसके लिए कॉन्वर्सेंट सार प्रकार अधिक बहुरूपता की अनुमति देते हैं।
आप उन सबटालेटियों को सुरक्षित रूप से अनदेखा कर सकते हैं, किसी दिन, आप एक अमूर्त प्रकार के साथ एक समस्या को दबाते हैं जो कि आप जितना चाहें पॉलिमॉर्फिक नहीं है, और फिर आपको हस्ताक्षर में एक कॉन्वर्सियन एनोटेशन की तुलना में याद रखना चाहिए।
हम इस on reddit/ocaml कुछ महीने पहले चर्चा की:
निम्नलिखित कोड उदाहरण पर विचार करें:
module type S = sig
type 'a collection
val empty : unit -> 'a collection
end
module C : S = struct
type 'a collection =
| Nil
| Cons of 'a * 'a collection
let empty() = Nil
end
let test = C.empty()
प्रकार आप test
के लिए मिलता है '_a C.collection
है, 'a C.collection
कि आप उम्मीद करेंगे के बजाय। यह एक बहुलक प्रकार नहीं है ('_a
एक मोनोमोर्फिक अनुमान चर है जो अभी तक पूरी तरह से निर्धारित नहीं है), और आप ज्यादातर मामलों में इससे खुश नहीं होंगे।
ऐसा इसलिए है क्योंकि C.empty()
एक मूल्य नहीं है, इसलिए इसका प्रकार सामान्यीकृत नहीं है (~ पॉलिमॉर्फिक बनाया गया है)।
module type S = sig
type +'a collection
val empty : unit -> 'a collection
end
बेशक यह केवल इसलिए होता है क्योंकि मॉड्यूल C
हस्ताक्षर S
के साथ बंद किया गया है:: module C : S = ...
आराम मूल्य प्रतिबंध से लाभ के लिए, आपको सार प्रकार 'a collection
covariant चिह्नित करने के लिए की है। यदि मॉड्यूल C
को स्पष्ट हस्ताक्षर नहीं दिया गया था, तो टाइप-सिस्टम सबसे सामान्य भिन्नता (यहां कॉन्वर्सिस) का अनुमान लगाएगा और कोई उसे नोटिस नहीं करेगा।
एक अमूर्त इंटरफेस के खिलाफ प्रोग्रामिंग अक्सर उपयोगी होता है (जब एक मज़ेदार को परिभाषित करता है, या प्रेत प्रकार अनुशासन को लागू करता है, या मॉड्यूलर प्रोग्राम लिखता है) तो इस तरह की स्थिति निश्चित रूप से होती है और यह आराम मूल्य प्रतिबंध के बारे में जानना उपयोगी होता है।
आप सिद्धांत को समझने के लिए चाहते हैं, तो मूल्य प्रतिबंध और इसकी छूट जैक्स Garrigue, जिसका पहले कुछ पेज विषय और मुख्य विचार करने के लिए एक नहीं बल्कि दिलचस्प और सुलभ परिचय कर रहे हैं से 2004 अनुसंधान लेख Relaxing the value restriction में चर्चा कर रहे हैं।
जेन स्ट्रीट से संबंधित पोस्ट: https://blogs.janestreet.com/a-and-a/ –