जबकि GHC एक्सटेंशन के माध्यम से अपने रास्ते से काम कर रहा है, मैं RankNTypes
at the School of Haskell, जो था निम्न उदाहरण में आए अंतर यह है कि "उत्तरार्द्ध हस्ताक्षर के लिए कुछ Num n के लिए एन से एन के लिए एक फ़ंक्शन की आवश्यकता होती है; पूर्व हस्ताक्षर को प्रत्येक Num n के लिए n से n के लिए एक फ़ंक्शन की आवश्यकता होती है।"समझौता हास्केल के RankNTypes
मैं समझ सकता हूं कि पूर्व प्रकार को कोष्ठक या अधिक सामान्य में होने के लिए हस्ताक्षर की आवश्यकता होती है। मैं स्पष्टीकरण को समझ नहीं पा रहा हूं कि बाद वाले हस्ताक्षर को केवल कुछ Num n
"के लिए n -> n
फ़ंक्शन की आवश्यकता होती है। क्या कोई विस्तार और स्पष्टीकरण दे सकता है? आप इस पूर्व हस्ताक्षर को "कैसे पढ़ते हैं" ताकि ऐसा लगता है कि इसका क्या अर्थ है? क्या बाद वाला हस्ताक्षर के समान forall
की आवश्यकता के बिना है?
फ़ंक्शन के शरीर के बारे में सोचें: '(एफ (1 :: इंट), एफ (1.0 :: डबल))'। आप इसके लिए बाद के प्रकार हस्ताक्षर का उपयोग नहीं कर सकते हैं। 'Num n => n -> n -> (Int, Double) 'में आपके पास' n' एक ही समय में 'Int' और' Double' * होना चाहिए *। '(Forall n। Num n => n -> n) -> (Int, Double) 'का उपयोग करना आपके पास है कि फ़ंक्शन' f' को विभिन्न प्रकारों पर लागू किया जा सकता है और इस प्रकार यह अच्छी तरह टाइप किया गया है। – Bakuriu