मौलिक बात आप शायद भूल रहे हैं यह है:
सबसे प्रोग्रामिंग भाषाओं में, यदि आप कहते हैं कि "इस समारोह किसी भी प्रकार के रिटर्न", इसका मतलब है समारोह तय कर सकते हैं कि किस प्रकार मूल्य वास्तव में लौटता है।
हास्केल में, यदि आप कहते हैं कि "इस समारोह किसी भी प्रकार के रिटर्न", इसका मतलब है कि फोन करने वाले तय करने के लिए किस प्रकार का होना चाहिए कि हो जाता है। (!)
तो अगर मैं तुम्हें foo :: Int -> x
बारे में, यह सिर्फ एक String
वापस नहीं लौट सकते, क्योंकि मैं इसे एक String
के लिए नहीं पूछ सकते हैं।मैं Customer
, या ThreadId
, या कुछ भी के लिए पूछ सकता हूं।
जाहिर है, foo
कोई भी तरीका नहीं है कि प्रत्येक संभावित प्रकार का मूल्य कैसे बनाया जाए, यहां तक कि ऐसे प्रकार भी जो अभी तक मौजूद नहीं हैं। संक्षेप में, foo
लिखना असंभव है। जो कुछ भी आप कोशिश करते हैं वह आपको त्रुटियों को टाइप करेगा, और संकलित नहीं करेगा।
(चेतावनी: वहाँ एक तरह से यह करने के लिए है foo
पाश सकता है हमेशा के लिए, या एक अपवाद फेंक लेकिन यह नहीं कर सकते हैं वापसी कोई मान्य मान।।।)
एक समारोह होने के लिए कोई तरीका नहीं है किसी भी संभावित प्रकार के मूल्य बनाने में सक्षम। लेकिन यह पूरी तरह से संभव है किसी फ़ंक्शन के लिए डेटा को स्थानांतरित करने के लिए बिना किसी प्रकार के डेटा को स्थानांतरित करने के लिए। इसलिए, यदि आप कोई ऐसा फ़ंक्शन देखते हैं जो किसी भी प्रकार के डेटा को स्वीकार करता है, तो केवल एक चीज जो इसके साथ कर सकती है वह इसे चारों ओर ले जाना है।
वैकल्पिक रूप से, यदि प्रकार किसी विशिष्ट वर्ग से संबंधित है, तो फ़ंक्शन उस वर्ग के तरीकों का उपयोग कर सकता है। (सका। यह करने के लिए नहीं है, लेकिन यह अगर कर सकते हैं यह करना चाहता है।)
मूल रूप से, यही कारण है कि आप वास्तव में क्या एक समारोह करता है बस इसके प्रकार हस्ताक्षर को देखकर बता सकते हैं। प्रकार हस्ताक्षर आपको बताता है कि यह कार्य किस डेटा को दिया जा रहा है, उसके बारे में "जानता है" क्या है, और इसलिए यह संभवतः कौन से संभावित संचालन कर सकता है। यही कारण है कि अपने प्रकार के हस्ताक्षर से एक हास्केल फ़ंक्शन की खोज करना इतना शापित है।
आपने अभिव्यक्ति को सुना है "हास्केल में, अगर यह संकलित होता है, तो यह आमतौर पर सही काम करता है"? खैर, यही कारण है कि। ;-)
आरडब्ल्यूएच के अध्याय 2 को खत्म करने से पहले? – ehird
यह एक निशुल्क लेख है, हाहाहा –
@ehird वह गहराई से स्पष्टीकरण चाहता था, तो यहां यह है। अन्य लोगों द्वारा बेसिक हैंड-वेविंग स्पष्टीकरण पहले ही दिया जा चुका है – nponeccop