अक्सर where
खंडों में परिभाषाएं परिभाषित करने के लिए स्वयं को दोहराने से बचने के लिए हैं यदि उप-अभिव्यक्ति परिभाषा में एक से अधिक बार होती है। ऐसे मामले में, प्रोग्रामर इनलाइन उप-अभिव्यक्तियों को लिखने के लिए स्थानीय परिभाषा को सरल स्टैंड-इन के रूप में सोचता है। आप आम तौर पर इनलाइन उप-अभिव्यक्तियों को स्पष्ट रूप से टाइप नहीं करेंगे, इसलिए आप where
परिभाषा को टाइप नहीं करते हैं। यदि आप इसे टाइपिंग पर सहेजने के लिए कर रहे हैं, तो प्रकार की घोषणा आपकी सभी बचत को मार देगी।
हास्केल के शिक्षार्थियों को उस फ़ॉर्म के उदाहरणों के साथ where
पेश करना काफी आम लगता है, इसलिए वे सोचते हैं कि "सामान्य शैली" स्थानीय परिभाषाओं के लिए प्रकार की घोषणा नहीं देना है। कम से कम, यह मेरा अनुभव हैस्केल सीखने का अनुभव था। मुझे तब से पता चला है कि मेरे कई कार्यों को where
ब्लॉक की आवश्यकता के लिए काफी जटिल हैं, अगर मुझे स्थानीय परिभाषाओं के प्रकार को नहीं पता है, तो मैं अब उन्हें टाइप करने की दिशा में गलती करने की कोशिश करता हूं; भले ही मुझे लगता है कि जब मैं कोड लिख रहा हूं, तो यह स्पष्ट है कि यह कुछ स्पष्ट नहीं हो सकता है जब मैं इसे थोड़ी देर तक नहीं देख पा रहा हूं। मेरी उंगलियों के लिए थोड़ा सा प्रयास लगभग हमेशा एक या दो उदाहरणों से बाहर निकलता है ताकि मेरे सिर में टाइप अनुमान लगाया जा सके!
इंगो के जवाब जानबूझ एक स्थानीय परिभाषा करने के लिए एक प्रकार दे रही है नहीं के लिए एक अच्छा कारण देता है, लेकिन मुझे लगता है मुख्य कारण यह है कि कई प्रोग्रामर अंगूठे का नियम है कि प्रकार घोषणाओं शीर्ष स्तर परिभाषाएँ नहीं बल्कि के लिए प्रदान किया आत्मसात किया है स्थानीय परिभाषाओं के लिए जिस तरह से उन्होंने हास्केल सीखा।
मैं इस सवाल का जवाब नहीं दे सकता कि यह तेजी से संकलित करेगा या नहीं, लेकिन यदि यह एक गैर-तुच्छ कार्य है तो टाइप हस्ताक्षर लिखना हमेशा अच्छा अभ्यास है। – Wes
इसके अलावा, इनमें से कई स्थानीय परिभाषाओं को बाहरी स्कोप से प्रकार चरों तक पहुंचने की आवश्यकता होती है, जो 'asTypeOf' और दोस्तों के साथ कोड को अव्यवस्थित करने की आवश्यकता होती है, जब तक कि आप' ScopedTypeVariables' का उपयोग न करें। – Vitus
यदि आपका कार्य एक प्रकार की घोषणा पाने के लिए पर्याप्त महत्वपूर्ण है, तो इसे प्रथम श्रेणी का नागरिक क्यों न बनाएं? – rotskoff