एक तरह से सोचने के लिए के बारे में यह है कि Ord a
और Num a
कार्य करने के लिए अतिरिक्त आदानों कर रहे हैं। वे एक विशेष प्रकार के इनपुट हैं हालांकि: शब्दकोश। जब आप किसी विशेष प्रकार a
के साथ इस फ़ंक्शन का उपयोग करते हैं, तो पर Ord
और Num
संचालन के लिए शब्दकोश भी उपलब्ध होना चाहिए।
कोई भी फ़ंक्शन जो शब्दकोश इनपुट के साथ फ़ंक्शन का उपयोग करता है, वही शब्दकोश इनपुट भी होना चाहिए।
foo :: (Num a, Ord a) => a -> t
foo x = loop x someFunc someT
हालांकि, आपको इन शब्दकोशों को स्पष्ट रूप से पास करने की आवश्यकता नहीं है।हास्केल आपके लिए यह ख्याल रखेगा, मान लें कि एक शब्दकोश उपलब्ध है। आप टाइपक्लास उदाहरण के साथ एक शब्दकोश बना सकते हैं।
instance Num MyType with
x + y = ...
x - y = ...
...
यह MyType
पर Num
के संचालन के लिए एक शब्दकोश बनाता है, इसलिए MyType
कहीं भी इस्तेमाल किया जा सकता है कि Num a
एक आवश्यक इनपुट है (यह मानते हुए इसे अन्य आवश्यकताओं को संतुष्ट, निश्चित रूप से)।
स्रोत
2012-02-04 21:44:19
यह स्पष्ट करने योग्य है कि हालांकि हम उन्हें "शब्दकोश" कहते हैं, वे _not_ हैश टेबल हैं, बल्कि कार्यों के रिकॉर्ड हैं। वे ऑब्जेक्ट उन्मुख भाषाओं में वी-टेबल की तरह हैं, सिवाय इसके कि वे मूल्यों से जुड़े नहीं हैं। – hammar