t
तरह * -> (* -> *) -> *
के वर्ग Tofu
का एक प्रकार पैरामीटर (t :: * -> (* -> *) -> *
लिखित) है। यह जीएचसी द्वारा t
का अनुमानित प्रकार है क्योंकि -XPolyKinds
की अनुपस्थिति में, जीएचसी *
को सभी प्रकार के पैरामीटर को डिफॉल्ट करने का प्रयास करता है। इस प्रकार जीएचसी मानता है a
दयालु *
है (हालांकि आपके हस्ताक्षर में कुछ भी यह एकमात्र विकल्प नहीं बनाता है)।
प्रकार निर्माता (->)
तरह* -> * -> *
है। चूंकि j a
(->)
पर पैरामीटर के रूप में प्रकट होता है, j a
में *
होना चाहिए। चूंकि जीएचसी ने माना है कि a
में *
है, j
एक प्रकार है जो *
का प्रकार लेता है और *
की तरह कुछ देता है। इस प्रकार:
j :: * -> *
t
के बाद से a
और j
दोनों पर लागू होता है, t
पहला तर्क a
तरह *
है और दूसरा तर्क j
तरह *->*
है क्योंकि, तरह * -> (* -> *) -> *
है, और कुल मिलाकर प्रकार t a j
चाहिए*
टाइप करें क्योंकि यह (->)
प्रकार का पैरामीटर भी है।
कक्षाएं सिर्फ प्रकार पैरामीटर लेने (बस data Foo a b
की तरह) प्रकार के होते हैं, Foo a b
सिवाय तरह *
जबकि Tofu t
तरह एक विशेष प्रकार का Constraint
है। इस प्रकार Tofu
की तरह है:
(* -> (* -> *) -> *) -> Constraint
GHC इंगित करता है के रूप में। Constraint
केवल बाधाओं को दिया गया प्रकार है। हस्ताक्षर में
(Num a) => a -> a -> a
(Num a)
तरहConstraint
के प्रकार है।
मैं लगभग समझता हूं, लेकिन मैं एक नौसिखिया हूं। क्या आप थोड़ा सा विस्तार कर सकते हैं? – orome
यदि मैं वास्तव में ': t tofu' देखता हूं तो यह थोड़ा कम क्रिप्टिक है। हालांकि मैं अभी भी थोड़ा धुंधला हूँ। – orome
अब अपडेट पर काम कर रहा है – crockeea