हां, इसे flip :: (a -> b -> c) -> b -> a -> c
कहा जाता है, उदा। flip (>) 3 5 == True
। हैकेज पर अधिक जानकारी और स्रोत: flip।
आप जो चाहते हैं वह फ़ंक्शन एप्लिकेशन के तर्कों को दूर करने के लिए है, है ना? ठीक है, चूंकि ($)
फ़ंक्शन का उपयोग करके फ़ंक्शन एप्लिकेशन है, तो आप flip ($) :: b -> (b -> c) -> c
लिख सकते हैं। चलो देखते हैं कि क्या होता है। यहाँ दो प्रस्तावना कार्यों के लिए स्रोत है:
-- from Hackage:
($) :: (a -> b) -> a -> b
f $ x = f x
-- from Hackage:
flip :: (a -> b -> c) -> b -> a -> c
flip f x y = f y x
तो, मूल रूप से यदि आप एक साथ प्रकार रखा, flip ($)
हो जाता है
flip ($) ::
b -> -- type of x, argument of y and second argument of ($)
(b -> c) -> -- type of y, function applied by ($) as its first argument
c -> -- result of the application "y x"
आप कार्यों की वास्तविक परिभाषा का पालन करें:
flip ($) = (\f x y -> f y x) ($) -- from flip's def.
= \x y -> ($) y x -- partial application
= y x -- from ($)'s def.
स्रोत
2012-05-30 12:04:58
वाह, मुझे कागज और कलम के साथ लगभग 5 मिनट लग गए, यह पता लगाने के लिए कि कैसे 'आईडी'' ए -> ए 'हस्ताक्षर किसी भी तरह से' फ्लिप 'पर कुछ' > बी -> सी'। यह थोड़ा सा जा रहा लायक हो सकता है! – Ashe
@ लेन: यह देखने के बाद स्पष्ट हो जाता है कि जब फ़ंक्शंस पर लागू होता है, तो 'आईडी' '($)' –
जैसा ही होता है यह बहुत सच है! मेरे लिए "ए-हा" पल यह महसूस कर रहा था कि मुझे 'a -> b -> c' को 'a -> (b -> c)' के रूप में देखना चाहिए, और उसके बाद उसे 'id'' एस 'ए' -> ए 'और पाया कि' ए = ए '= (बी -> सी) '-मैं धैर्य में मतभेदों पर बहुत अधिक देख रहा था और इसे पिछले नहीं कर सका। – Ashe