अन्य ने इस प्रश्न के कई पहलुओं को काफी अच्छी तरह संबोधित किया है। मैं +
के प्रकार के हस्ताक्षर Num a => a -> a -> a
के पीछे तर्क के बारे में एक शब्द कहना चाहता हूं।
सबसे पहले, Num
टाइपक्लास के पास Num
के एक कलात्मक उदाहरण को दूसरे में परिवर्तित करने का कोई तरीका नहीं है। मान लीजिए कि मेरे पास काल्पनिक संख्याओं के लिए डेटा प्रकार है; वे अभी भी संख्याएं हैं, लेकिन आप वास्तव में उन्हें केवल Int
में परिवर्तित नहीं कर सकते हैं।
दूसरा, आप किस प्रकार के हस्ताक्षर पसंद करेंगे?
(+) :: (Num a, Num b) => a -> b -> a
(+) :: (Num a, Num b) => a -> b -> b
(+) :: (Num a, Num b, Num c) => a -> b -> c
अन्य विकल्पों पर विचार करने के बाद, आपको एहसास है कि a -> a -> a
सबसे आसान विकल्प है। पॉलिमॉर्फिक परिणाम (ऊपर तीसरे सुझाव में) शांत हैं, लेकिन कभी-कभी आसानी से उपयोग करने के लिए बहुत सामान्य हो सकते हैं।
तीसरा, हास्केल Blub नहीं है। अधिकांश, हालांकि तर्कसंगत रूप से, हास्केल के बारे में डिज़ाइन निर्णय लोकप्रिय भाषाओं के सम्मेलनों और अपेक्षाओं को ध्यान में रखते हैं। मैं अक्सर यह कहने का आनंद लेता हूं कि हास्केल सीखने का पहला कदम यह है कि आप प्रोग्रामिंग के बारे में जो कुछ भी जानते हैं उसे अनदेखा करना है। मुझे यकीन है कि ज्यादातर, अगर सभी नहीं, अनुभवी हैस्केलर्स को न्यू टाइपक्लास, और हास्केल की कई अन्य जिज्ञासाओं द्वारा पार किया गया है, क्योंकि अधिकांश ने पहले "मुख्यधारा" भाषा सीखी है। लेकिन धैर्य रखें, आप अंततः हास्केल निर्वाण तक पहुंच जाएंगे। :)
स्रोत
2011-11-25 01:35:01
जैसा कि ज्ञापन जाता है, "इंटेग्रल से अधिक 'की आवश्यकता है"। –
मुझे 'x.f() 'बनाम' g = x.f की याद दिलाता है; जी(); 'जावास्क्रिप्ट में। जब वेरिएबल्स प्रतिस्थापन मॉडल अमूर्त तोड़ते हैं तो यह बेकार हो जाता है। – hugomg