Go के प्रकार के निष्कर्ष के बारे में यह StackOverflow उत्तर देखें । मैं स्वयं जाने से परिचित नहीं हूँ, लेकिन इस उत्तर के आधार पर यह एक तरह से "टाइप डिडक्शन" (कुछ C ++ टेम्पोरोलॉजी को उधार लेने के लिए) जैसा लगता है। इसका मतलब है कि अगर आपके पास:
x := y + z
फिर प्रकार का x
पता लगाकर घटाया जाता है y + z
, जो संकलक के लिए एक अपेक्षाकृत तुच्छ चीज है। ऐसा करने के लिए, के प्रकार y
और एक प्राथमिकताz
को जानने की जरूरत है : यह प्रकार एनोटेशन के माध्यम से किया जा सकता है या उन्हें सौंपे गए शाब्दिक से अनुमान लगाया जा सकता है।
इसके विपरीत, अधिकांश कार्यात्मक भाषाओं में प्रकार का अनुमान होता है जो सभी प्रकार की सूचनाओं का उपयोग मॉड्यूल (या फ़ंक्शन, यदि इंजेक्शन एल्गोरिथ्म स्थानीय है) के भीतर चर के प्रकार को प्राप्त करने के लिए करता है। जटिल इंजेक्शन एल्गोरिदम (जैसे हिंडले-मिलनर) अक्सर पर्दे के पीछे कुछ प्रकार के एकीकरण (हल करने के समीकरणों की तरह) शामिल होते हैं। उदाहरण के लिए, हास्केल में, यदि आप लिखते हैं:
let x = y + z
तब हास्केल न केवल, x
बल्कि केवल y
और z
केवल इस तथ्य पर आधारित हो सकता है कि आप उन पर अतिरिक्त प्रदर्शन कर रहे हैं। इस मामले में:
x :: Num a => a
y :: Num a => a
z :: Num a => a
( a
यहां का निचला हिस्सा एक बहुरूप प्रकार को दर्शाता है , जिसे अक्सर C ++ जैसी अन्य भाषाओं में "जेनरिक" कहा जाता है। यह संकेत देने के लिए कि बाधा को जोड़ने के लिए Num a =>
एक बाधा है a
।
यहां एक और दिलचस्प उदाहरण है: फिक्स्ड-पॉइंट कॉम्बिनेटर जो किसी भी पुनरावर्ती कार्य को परिभाषित करने की अनुमति देता है:
let fix f = f (fix f)
ध्यान दें कि कहीं भी हमने इसका प्रकार निर्दिष्ट नहीं किया है f
, न ही हमने इसके प्रकार को निर्दिष्ट किया है fix
, फिर भी हास्केल संकलक स्वचालित रूप से पता लगा सकता है:
f :: t -> t
fix :: (t -> t) -> t
यह कहता है कि:
- पैरामीटर
f
को कुछ मनमाने प्रकार t
से एक ही प्रकार का एक फ़ंक्शन होना चाहिए t
।
fix
एक फ़ंक्शन है जो प्रकार का एक पैरामीटर प्राप्त करता है t -> t
और प्रकार का एक परिणाम देता है t
।
x
,y
,z
एक ही हैंNum
, एरिक प्रकार लेकिन वे अभी भी हो सकता हैInteger
रों,Double
रों,Ratio Integer
एस ... हास्केल सांख्यिक प्रकार के बीच एक मनमाना विकल्प बनाने के लिए तैयार है, लेकिन अन्य typeclasses के लिए नहीं है।