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 ।