Haskell Language
Profunctor
खोज…
परिचय
Profunctor एक टाइपसेकल्स है जो profunctors में profunctors पैकेज द्वारा प्रदान किया Data.Profunctor ।
पूर्ण विवरण के लिए "रिमार्क्स" अनुभाग देखें।
वाक्य - विन्यास
- dimap :: Profunctor p => (a -> b) -> (c -> d) -> pbc -> पैड
- lmap :: Profunctor p => (a -> b) -> pbc -> pac
- रैंप :: प्रॉक्टर पी => (बी -> सी) -> पब -> पीएसी
- डिमैप आईडी = आईडी
- lmap id = id
- रैंप आईडी = आईडी
- dimap fg = लैम्प च। रैम्प जी
- lmap f = dimap f id
- रैंप च = डिमैप आईडी एफ
टिप्पणियों
प्रोफेसर, जैसा कि हैक्स पर डॉक्स द्वारा वर्णित किया गया है, "एक द्विभाजक जहां पहला तर्क कंट्रावेरेंट है और दूसरा तर्क सहसंयोजक है।"
अच्छा तो इसका क्या मतलब है? खैर, एक बाइफ़रेंक्टर एक सामान्य फ़नकार की तरह होता है, सिवाय इसके कि इसमें एक के बजाय दो पैरामीटर होते हैं, जिनमें से प्रत्येक पर अपने स्वयं के fmap -समान फ़ंक्शन के साथ मैप किया जा सकता है।
"सहसंयोजक" होने का अर्थ है कि एक प्रॉक्टर के लिए दूसरा तर्क एक सामान्य फ़नकार की तरह है: इसकी मैपिंग फ़ंक्शन ( rmap ) में एक प्रकार का Profunctor p => (b -> c) -> pab -> pac । यह सिर्फ दूसरे तर्क पर फ़ंक्शन को मैप करता है।
"कंट्रावेरिएंट" होने के नाते पहला तर्क थोड़ा निराला बनाता है। सामान्य फ़न्क्टर की तरह मैपिंग के बजाय, इसके मैपिंग फंक्शन ( lmap ) में एक प्रकार का Profunctor p => (a -> b) -> pbc -> pac का एक प्रकार का हस्ताक्षर होता है। यह प्रतीत होता है कि बैकवर्ड मैपिंग किसी फ़ंक्शन के इनपुट के लिए सबसे अधिक समझ में आता है: आप इनपुट पर a -> b चलाएंगे, और फिर आपका दूसरा फ़ंक्शन, नए इनपुट को a रूप में छोड़ देगा।
नोट:: सामान्य, एक तर्क functors के लिए नामकरण एक छोटे से भ्रामक है Functor typeclass , औजार "covariant" functors जबकि "contravariant" functors में लागू किया जाता है Contravariant में typeclass Data.Functor.Contravariant , और पहले से (गुमराह नाम) Cofunctor में Data.Cofunctor ।
(->) Profunctor
(->) एक प्रॉक्टर का एक सरल उदाहरण है: बाएं तर्क एक फ़ंक्शन के लिए इनपुट है, और सही तर्क रीडर फ़ंक्शनल उदाहरण के समान है।
instance Profunctor (->) where
lmap f g = g . f
rmap f g = g . g