ठीक है, इसलिए यहाँ भाषा की एक अस्पष्ट कोने है:प्रकार हस्ताक्षर
हास्केल यदि आपने पहचानकर्ता जो हस्ताक्षर टाइप है निर्यात करने के लिए अनुमति देता है एक प्रकार है कि है नहीं निर्यात का उल्लेख है। इस के अर्थशास्त्र वास्तव में क्या है?
उदाहरण के लिए, मैं
module Foobar (bar) where
data Foo = ...
bar :: String -> Foo
Foo
निर्यात नहीं किया गया है लगता है bar
है, जबकि। bar
का प्रकार Foo
का उल्लेख करता है। कई प्रोग्रामिंग भाषाएं आपको ऐसा करने नहीं देतीं, लेकिन हास्केल करता है।
तो अब क्या? ऐसा लगता है कि मैं bar
पर कॉल कर सकता हूं, लेकिन इसके परिणाम के साथ बहुत कुछ नहीं कर सकता। मैं विशेष रूप से, मैं (संभवतः) परिणाम प्रकार का नाम नहीं बोल सकता, जो थोड़े अजीब है। संभवतः यदि मॉड्यूल ने कुछ कार्यों को निर्यात किया जो Foo
इनपुट के रूप में लेते हैं, तो मुझे इनपुट के रूप में मेरे परिणाम के साथ उनको कॉल करने में सक्षम होना चाहिए ... फिर भी मैं पूरी तरह से एक प्रकार के हस्ताक्षर में ऐसा नहीं कह सकता।
निश्चित रूप से, उपरोक्त की तरह कुछ करना एक अच्छा विचार नहीं है; मैं इसे वास्तविक कोड में करने का प्रस्ताव नहीं कर रहा हूं। मैं वास्तव में उत्सुक हूं कि यह वास्तव में करता है।
जहाँ तक मैं देख सकता हूं, आपने स्थिति का सही ढंग से विश्लेषण किया है। आप 'फू' लेने वाले अन्य कार्यों को कॉल कर सकते हैं, और आप पॉलिमॉर्फिक फ़ंक्शंस को कॉल कर सकते हैं, लेकिन आप अप्रत्याशित नाम का उल्लेख करते हुए टाइप हस्ताक्षर नहीं लिख सकते हैं। – kosmikus