Haskell Language
Bifunctor
खोज…
वाक्य - विन्यास
- bimap :: (a -> b) -> (c -> d) -> pac -> pbd
- पहला :: (a -> b) -> pac -> pbc
- दूसरा :: (b -> c) -> pab -> pac
टिप्पणियों
मिल Functor
का एक रन एकल प्रकार के पैरामीटर में सहसंयोजक है। उदाहरण के लिए, अगर f
एक है Functor
, तो एक दिया fa
, और फार्म के एक समारोह a -> b
, एक एक प्राप्त कर सकते हैं fb
(के उपयोग के माध्यम fmap
)।
एक Bifunctor
दो प्रकार के मापदंडों में Bifunctor
है। यदि f
एक Bifunctor
, तो एक fab
दिया जाता है, और दो कार्य, एक a -> c
, और दूसरा b -> d
, तो कोई एक fcd
( bimap
का उपयोग bimap
) प्राप्त कर सकता है।
first
को पहले प्रकार के पैरामीटर पर एक fmap
के रूप में माना जाना चाहिए, second
पर एक fmap
रूप में, और bimap
को क्रमशः पहले और दूसरे प्रकार के मापदंडों पर दो कार्यों को मैप करने के रूप में कल्पना की जानी चाहिए।
Bifunctor के सामान्य उदाहरण
दो-तत्व tuples
(,)
एक प्रकार का एक उदाहरण है जिसमें एक Bifunctor
उदाहरण है।
instance Bifunctor (,) where
bimap f g (x, y) = (f x, g y)
bimap
कार्यों की एक जोड़ी लेता है और उन्हें tuple के संबंधित घटकों पर लागू करता है।
bimap (+ 2) (++ "nie") (3, "john") --> (5,"johnnie")
bimap ceiling length (3.5 :: Double, "john" :: String) --> (4,4)
Either
Either
Bifunctor
का उदाहरण दो कार्यों में से एक का चयन करता है जो इस बात पर निर्भर करता है कि मूल्य Left
या Right
।
instance Bifunctor Either where
bimap f g (Left x) = Left (f x)
bimap f g (Right y) = Right (g y)
पहला और दूसरा
यदि केवल पहले तर्क, या केवल दूसरे तर्क पर सहानुभूति से मैपिंग वांछित है, तो first
या second
उपयोग किया जाना चाहिए ( bimap
बदले)।
first :: Bifunctor f => (a -> c) -> f a b -> f c b
first f = bimap f id
second :: Bifunctor f => (b -> d) -> f a b -> f a d
second g = bimap id g
उदाहरण के लिए,
ghci> second (+ 2) (Right 40)
Right 42
ghci> second (+ 2) (Left "uh oh")
Left "uh oh"
बिफुनकर की परिभाषा
Bifunctor
दो प्रकार के मापदंडों के साथ प्रकारों का वर्ग है ( f :: * -> * -> *
), दोनों को सहानुभूतिपूर्वक एक साथ मैप किया जा सकता है।
class Bifunctor f where
bimap :: (a -> c) -> (b -> d) -> f a b -> f c d
bimap
को एक fmap
के लिए fmap
संचालन के एक जोड़े को लागू करने के रूप में माना जा सकता है।
का एक सही उदाहरण Bifunctor
एक प्रकार के लिए f
bifunctor कानून है, जो के अनुरूप हैं को पूरा करना चाहिए functor कानून :
bimap id id = id -- identity
bimap (f . g) (h . i) = bimap f h . bimap g i -- composition
Bifunctor
वर्ग Data.Bifunctor
मॉड्यूल में पाया जाता है। जीएचसी संस्करण> 7.10 के लिए, इस मॉड्यूल को कंपाइलर के साथ बांधा गया है; पहले के संस्करणों के लिए आपको bifunctors
पैकेज स्थापित करना bifunctors
।