haskell - How does curry (==) work? -
मैं समझता हूं कि:
(==) :: ईक ए = & gt; ए - & gt; ए - & gt;
Uncurry (==) :: ईक बी = & gt; (बी, बी) - & gt; Bool।
आवेदन का एक उदाहरण uncurry हो सकता है (==) (2, 2), जिसका परिणाम सच है।
लेकिन मैं समझ नहीं पा रहा हूं एक उदाहरण क्यों:
करी (==) :: (ईक ए, ईक बी) = & gt; ए - & gt; बी - & gt; (ए, बी) - & gt; Itemprop = "text">
करी की परिभाषा:
करी :: ((ए, बी) - & gt; सी) - & gt; ए - & gt; बी - & gt; सी करी एफ = \ x y - & gt; F (x, y)
यदि हम उस स्थान को प्रतिस्थापित करते हैं:
\ x y z - & gt; (करी (==) x y) z \ x y z - & gt; ((==) (x, y)) z - फ़ंक्शन अनुप्रयोग \ x y z - & gt; (==) (x, y) z - कोष्ठकों को निकालें (फ़ंक्शन एप्लिकेशन को हास्केल में एसोसिएटिव छोड़ दिया जाता है, इसलिए वे यहां अनावश्यक हैं) \ x y z - & gt; (एक्स, वाई) == जेड - इनफ़िक्स में कन्वर्ट
हम तुरंत बता सकते हैं कि
z को किसी प्रकार का ट्यूपल भी होना चाहिए, या नहीं
== के दोनों तर्क समान प्रकार से हैं, क्योंकि पिछली पंक्ति में जांच नहीं होती।
जब हम
Eq <के लिए tuple उदाहरण की परिभाषा को देखते हैं < कोड>, हम पाते हैं
उदाहरण (ईक ए, ईक बी) = & gt; ईक (ए, बी) जहां (एक्स, वाई) == (एक्स ', वाई') = (एक्स == x ') और amp; (Y == y ')
(यह मानक लाइब्रेरी के स्रोत कोड में नहीं लिखा है, यह वास्तव में "स्टैंडअलोन डेरिविंग" तंत्र का प्रयोग करता है ताकि स्वचालित रूप से इसके लिए उदाहरण प्राप्त हो सके
(ईक ए, ईक बी) = & gt; (ए, बी) प्रकार। यह कोड जो कि व्युत्पन्न हुआ उसके बराबर है।)
इसलिए, इस मामले में, हम
== का इलाज करें जैसे कि उसका प्रकार है
(==) :: (Eq a, Eq b) = & gt; (ए, बी) - & gt; (ए, बी) - & gt;
x और
y दोनों प्रकार के होते हैं जो कि
Eq के उदाहरण हैं, लेकिन वे डॉन ' टी समान उदाहरण
Eq होने की आवश्यकता है। उदाहरण के लिए, अगर हमारे पास
12 और
"abc" है? ये दो अलग-अलग प्रकार हैं लेकिन हम अभी भी हमारे कार्य का उपयोग कर सकते हैं, क्योंकि वे
Eq :
(\ xyz - & gt; (x, y) == z) के दोनों उदाहरण हैं (12, " एबीसी ") (30," सीडी ") (यह अभिव्यक्ति टाइप की जांच करता है और
False के लिए मूल्यांकन करता है।)
Comments
Post a Comment