मैं ocaml मॉड्यूल और उनके संकलन के बारे में एक विशिष्ट बात को समझने के लिए कोशिश कर रहा हूँ:अतिरिक्तता (मिलीग्राम/MLI)
हूँ मैं पहले से ही एक .mli
विशिष्ट .ml
कार्यान्वयन के अंदर में घोषित प्रकार redeclare करने के लिए मजबूर?
बस एक उदाहरण देने के लिए:
(* foo.mli *)
type foobar = Bool of bool | Float of float | Int of int
(* foo.ml *)
type baz = foobar option
यह, के बारे में इंटरफेस/कार्यान्वयन सोच के अपने सामान्य तरीके के अनुसार, ठीक होना चाहिए, लेकिन यह कहते
साथ संकलित करने के लिए प्रयास करते हुएError: Unbound type constructor foobar
ocamlc -c foo.mli
ocamlc -c foo.ml
बेशक अगर मैं foobar
घोषित करता हूं तो त्रुटि गायब हो जाती है foo.ml
अंदर भी है लेकिन यह एक जटिल तरीके से मैं हर बदलाव पर synched चीजें रखने के लिए लगता है।
वहाँ एक रास्ता यह अतिरेक या मैं प्रकार हर बार redeclare करने के लिए मजबूर कर रहा हूँ से बचने के लिए है?
अग्रिम
मैं वहाँ एक '.ml' फ़ाइल मिलकर' .mli' में वर्णित प्रकार अनुमान लगाने के लिए अनुमति देता है में कोई सीमाएं होना चाहिए नहीं लगता। जो मैं वास्तविक कार्यान्वयन को समझता हूं __forces redundancy__ लेकिन यह भी कि __ दोनों हस्ताक्षर बराबर__ होना चाहिए, इसलिए यह प्रभावी रूप से समान घोषणाओं को दोगुना कर रहा है। यही कारण है कि मैंने सोचा कि उन्हें इन घोषणाओं के बारे में अवगत होना चाहिए, उन्हें कॉपी और पेस्ट किए बिना। प्रकार अनुमान एल्गोरिदम मेरे अनुसार समस्याओं का सामना नहीं करेगा। – Jack
यह काफी अनावश्यकता को मजबूर नहीं करता है और न ही यह हस्ताक्षरों की समानता की आवश्यकता होती है, केवल एमएल फ़ाइल में घोषणा एमएलआई घोषणा से बराबर या अधिक विशिष्ट होनी चाहिए। एमएलआई का बिंदु इंटरफेस में जो दिख रहा है उसे परिभाषित करना है, क्योंकि आप इस प्रकार का पर्दाफाश नहीं करना चुन सकते हैं (जिस स्थिति में यह एमएलआई फाइल में नहीं है) या आप यह खुलासा कर सकते हैं कि एक प्रकार है, लेकिन नहीं इसका उपयोग किया जाता है (जिस स्थिति में प्रकार की घोषणा अलग होती है)। निश्चित रूप से आपकी स्थिति में संकलक के लिए यह समझ में आ जाएगा कि यह केवल प्रकार को मानने के बाद से है क्योंकि यह पूरी तरह से mli में परिभाषित है। –
@Niki * मूल्य * घोषणाओं में कोई मजबूर अनावश्यकता नहीं है (जो कि किसी भी तरह से .ml में वैकल्पिक हैं), और व्यवहार में वह जगह है जहां "कम से कम विशिष्ट के रूप में" आता है। लेकिन 99% मामलों में एक * प्रकट प्रकार * घोषित एक इंटरफ़ेस में कार्यान्वयन में प्रकार की परिभाषा के समान है। यह अनावश्यक है, और परेशान है, लेकिन एक भाषा डिजाइनर के रूप में मैंने इस समस्या के बारे में कड़ी मेहनत की है और मैंने एक प्रस्ताव के साथ नहीं आया है जो मुझे लगता है कि दोनों सिद्धांत और ओकैमल से काफी बेहतर हैं। –