क्या 'वैकल्पिक' का एक वैन लाहरोवेन प्रतिनिधित्व है


15

कई प्रकार के प्रकाशिकी में एक वैन लाहरोवेन प्रतिनिधित्व है।

उदाहरण के लिए, इस Lensप्रकार Lens s t a b का प्रतिनिधित्व किया जा सकता है:

 Functor f => (a -> f b) -> s -> f t

इसी Traversalतरह से, एक समान तरीके से प्रतिनिधित्व किया जा सकता है, इसके लिए Functorबाधा को स्वैप करना Applicative:

 Applicative f => (a -> f b) -> s -> f t

कई प्रकाशिकी रूपरेखाएं, जैसे मोनोकल और एरो नामक एक प्रकार को परिभाषित करती हैं Optional

मोनोकल के प्रकाशिकी में उत्तराधिकार और के Optionalबीच फिट बैठता हैLensTraversal

जैसा कि मैं इसे समझता हूं: यदि कोई Traversalऐसा है जो कई लक्ष्यों Lensको शून्य कर सकता है , तो यह एक ऐसा Optionalहै जो शून्य से एक लक्ष्य Lensहो सकता है ।

मोनोक्ले में, Optionalकार्यों की एक जोड़ी के रूप में परिभाषित किया गया है:

getOrModify :: s -> Either t a 
set :: (b, s) -> t

मोनोकल स्रोत कोड में टिप्पणी नहीं सुझाव है कि यह भी एक प्रतिनिधित्व करने के लिए संभव है Optional"एक कमजोर के रूप में PLensऔर कमजोर PPrism"

क्या Optionalवैन लाहरोवेन फ़ंक्शन के रूप में प्रतिनिधित्व करना संभव है ?

जवाबों:


10

यह दर्शाने का एक तरीका होगा कि यदि फनकार / आवेदक / मोनाड पदानुक्रम अधिक बारीक थे। विशेष रूप से:

class Functor f => Pointed f where
    pure :: a -> f a

type Optional s t a b = forall f. Pointed f => (a -> f b) -> s -> f t

ध्यान दें कि प्रकार शायद Affineलेंस लाइब्रेरी में नामित किया जाएगा यदि वह वर्ग पदानुक्रम में बड़े करीने से था।


1
यह मेरे उपयोग के मामले में पूरी तरह से ठीक है, जो कि "सिर्फ मज़े के लिए" स्काला ऑप्टिक्स लाइब्रेरी है जहाँ मैंने स्क्रैच से फ़नकार पदानुक्रम लिखा है, और इसलिए मैं इसे पसंद कर सकता हूं। क्या मैं यह सोचने में सही हूं कि इससे यह पता चलता है कि अगर मेरे बीच में Functorऔर Applicativeसाथ में एक और टाइप-क्लास था liftA2, लेकिन कोई शुद्ध नहीं था, तो यह एक ऑप्टिक को एक से कई लक्ष्यों के साथ परिभाषित करेगा ? क्या इसका कोई नाम है?
जो

1
यह सुझाव है कि मुझे पता नहीं है कि ऑप्टिक को क्या कहा जाएगा।
कार्ल

4
@ जोइ इंटरमीडिएट क्लास को Apply"सेमीग्रुपॉयड्स" पैकेज में कहा जाता है। hackage.haskell.org/package/semigroupoids-5.3.3/docs/…
danidiaz

2
... और में इसी ऑप्टिक lensपैकेज कहा जाता हैTraversal1
बेंजामिन हॉजसन

@ कार्ल हम कैसे सत्यापित कर सकते हैं कि यह type Optional s t a bवास्तव में उस ऑप्टिक के लिए सही प्रतिनिधित्व है, और यह कि सभी उपयुक्त कानून हैं? यह एक जादुई चाल की तरह लगता है। ऐसा क्यों था Pointedऔर क्या नहीं, कहते हैं Copointed? किसी अन्य दिए गए ऑप्टिक के लिए, हम सही प्रॉपर ट्रैक्टर प्रतिनिधित्व का अनुमान कैसे लगा सकते हैं?
विनित्स्की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.