चीजों को भ्रमित करने वाली पहली चीज़ Num a =>
है, इसलिए हम इसे पूरी तरह से अनदेखा कर देंगे। इसके बजाए, Int -> Int -> Int
पर विचार करें, जो आपके द्वारा दिए गए प्रकार के हस्ताक्षर का एक संभावित विशेषज्ञता है।
फ़ंक्शन लगभग हमेशा curried हास्केल में हैं। इसका मतलब है कि एक बहु-तर्क फ़ंक्शन वास्तव में एक तर्क का कार्य करता है जो एक फ़ंक्शन देता है जो अगली तर्क लेता है, और इसी तरह।
->
सही सहयोगी है, इसलिए Int -> Int -> Int
Int -> (Int -> Int)
जैसा ही है।
यह भी मतलब है कि इस परिभाषा
f :: Int -> Int -> Int
f x y = x + y
f :: Int -> Int -> Int
f x = \y -> x + y
वास्तव में रूप में ही है, हास्केल में सभी कार्यों ठीक एक तर्क ले। टुपल्स भी मौजूद हैं, लेकिन वे प्रथम श्रेणी के नागरिक हैं, इसलिए वे सिर्फ एक तर्क सूची से अधिक हैं।
Num a =>
टाइप सिस्टम का एक अलग पहलू है। यह कहता है कि प्रकार परिवर्तनीय a
Num
प्रकार वर्ग का एक उदाहरण होना चाहिए। Num
के उदाहरणों के सामान्य उदाहरण Int
और Double
शामिल हैं। तो Num
एक प्रकार का नहीं है, यह एक प्रकार का वर्ग है। Num a =>
प्रकार परिवर्तनीय a
पर एक बाधा का प्रतिनिधित्व करता है, यह फ़ंक्शन के लिए एक और तर्क नहीं है। इसलिए आपको (+)
का उपयोग करने के इस तरह से a
विवश चाहिए
(+)
विधि, Num
प्रकार वर्ग का एक सदस्य है। यदि आप f
हस्ताक्षर a -> a -> a
(बिना किसी बाधा के) देने का प्रयास करते हैं, तो यह काम नहीं करेगा क्योंकि a
पूरी तरह से अनियंत्रित है और हम इसके बारे में कुछ भी नहीं जानते हैं कि यह किस प्रकार हो सकता है। नतीजतन, हम (+)
पर इसका उपयोग नहीं कर सके।
स्रोत
2014-11-16 20:28:53
यदि आपके पास '(Ord a, Num a) => a -> a -> a' था तो आप क्या लिखेंगे? लिंक के लिए – Squidly