उत्तर
आप से Control.Arrow
> map (f *** f) a
(***)
ऑपरेटर का उपयोग करें या अपना स्वयं सहायक समारोह
> let both f (x, y) = (f x, f y)
> map (both f) a
परिभाषित आप lens
का उपयोग करते हैं, तो आप over both f
, या both %~ f
उपयोग कर सकते हैं कर सकते हैं। इसका अधिक अनुकूल होने का लाभ है - उदाहरण के लिए, यदि आपके पास सूचियों की एक जोड़ी है, तो आप both.mapped +~ toUpper
(:: ([Char],[Char]) -> ([Char],[Char])
) जैसे कुछ का उपयोग कर सकते हैं।
वैकल्पिक समाधान:
import Data.Bifunctor
bimap f f pair
Bifunctor.bimap
मूल रूप से भी Arrow.(***)
रूप में ही है, लेकिन अन्य bifunctors (Either a b
की तरह) के लिए काम करता है।
विषयांतर:
कारण है कि अपने मामले के लिए पूर्वनिर्धारित कोई बात नहीं है कि आप नहीं एक ही तत्व दो बार टाइप होने (,)
के लिए की Functor
, Applicative
आदि उदाहरणों में लिख सकते हैं।
data Pair a = Pair a a deriving Show
instance Functor Pair where
fmap f (Pair x y) = Pair (f x) (f y)
अब आप map (fmap (+1)) [Pair 12 14, Pair 17 18]
तरह बातें लिख सकते हैं: एक अपने "वेक्टर की तरह" प्रकार के साथ आप इस समस्या नहीं होती।
instance Applicative Pair where
pure x = Pair x x
(Pair f g) <*> (Pair x y) = Pair (f x) (g y)
आप एक ही तत्व प्रकार जोड़े के साथ एक बहुत काम करते हैं, यह (,)
से एक इस तरह करने के लिए स्विच करने के लिए उपयोगी हो सकता है: या फिर आप अपने Pair
पर विभिन्न कार्यों का उपयोग करना चाहते हैं, तो आप एक कदम आगे जा सकते हैं प्रकार।
digression के लिए धन्यवाद। –
- 1. सूची <X> से सूची <Y> पर सूची के लिए छोटा वाक्यविन्यास?
- 2. फ़ंक्शन `(y * y) <x 'दो तर्कों पर लागू होता है, लेकिन इसके प्रकार' बूल 'में
- 3. Pivot या ज़िप एक seq <seq<'a>> F #
- 4. एक क्रमबद्ध सरणी में सभी जोड़े (x, y) खोजें ताकि x + y <z
- 5. सी # सूची <> x द्वारा क्रमबद्ध करें y
- 6. घोषणा में "std :: वेक्टर <X> च();", "std :: वेक्टर <X>" एक इन्स्टेन्शियशन है?
- 7. <a> टैग
- 8. मैं एफ # 3.0 के साथ .NET 4.5 बीटा उपयोग कर रहा हूँ, और मैं एक LINQ <code>Expression<Func<'a, 'b>></code> के प्रकार <code>Expr<'a -> 'b></code> का एक एफ # उद्धरण कन्वर्ट करने के लिए कोशिश कर रहा हूँ समारोह <'a, obj>>
- 9. <% $, <% @, <% =, <% # ... सौदा क्या है?
- 10. ConfigParser के साथ नई लाइनें?</p> <pre><code><br> [ section one ]<br> one = Y,Z,X <br><br> [EG 2]<br> ias = X,Y,Z<br> </code></pre> <p>मेरे कार्यक्रम ठीक पढ़ने और इन मूल्यों प्रसंस्करण काम करता है:
- 11. कैसे बचें << - असाइन
- 12. साझा_ptr <A> क्यों साझा नहीं किया गया है shared_ptr <A const> में?
- 13. क्या पी (एक <= एक्स <= बी) प्रदर्शित करने के लिए अभिव्यक्ति() प्राप्त करने का कोई तरीका है?
- 14. गतिशील अभिव्यक्ति बनाना <Func<T,Y>>
- 15. एक अनुक्रम में दो-तर्क फ़ंक्शन कैसे लागू करें?</p> <pre><code>[a b c ...] </code></pre> <p>और एक समारोह <code>(f x y)</code>:
- 16. "ArrayList <A>" और "ArrayList <? extends A>" के बीच व्यावहारिक अंतर क्या है?
- 17. सूची करने के लिए तेज़ तरीका <T>Contains()
- 18. पुन: निर्देशित एटी <code>BusyBox</code><a href="http://en.wikipedia.org/wiki/BusyBox">command</a> में लिनक्स
- 19. <img><a> के अंदर नीली सीमा
- 20. #if परिभाषित (x) || (वाई); क्या यह मान्य है?</p> <pre><code>#if defined(x) || y </code></pre> <p>उपरोक्त कथन का क्या मतलब है:
- 21. Django:</p> <pre><code>a = A() b = B() a.my_b = b b.save() a.save() </code></pre> <p>हैरानी की बात है <code>a</code><code>my_b</code> विदेशी कुंजी क्षेत्र में <code>null</code> साथ सहेजा गया है: पहले लक्ष्य मॉडल
- 22. एक्सएमएल में <ArrayOf> की सूची <<
- 23. क्या रूबी में << ऑपरेटर को ओवरराइड करने का कोई तरीका है?
- 24. 'ऑपरेटर <<' के लिए 'std :: cout <<' में अस्पष्ट अधिभार <<
- 25. JQuery, <a> टैग
- 26. onclick <a> JQuery
- 27. एक फ़ंक्शन सेट क्यों है?</p> <pre><code>trait Set[A] extends (A => Boolean) </code></pre> <p>इसका कारण यह है प्रकार <code>A</code> contravariant स्थिति में होता है यह असंभव एक covariant अपरिवर्तनीय <code>Set</code> के लिए करते हैं:
- 28. विम जनस <D-F><D-/>
- 29. एंड्रॉइड वेबव्यू: <a> और <img>
- 30. के बीच क्या अंतर है! (एक्स < y) and x > = में सी ++?
या शायद सिर्फ एक लैम्ब्डा: 'मानचित्र (\ (x, y) -> (f x, f y)) a' – MtnViewMark