15

हम निरंतरता इकाई ट्रांसफार्मरक्या निरंतरता मोनैड ट्रांसफॉर्मर को कुछ और कई के साथ वैकल्पिक उदाहरण दिया जा सकता है?

data Cont r m a = Cont {run :: (a -> m r) -> m r} 

के रूप में हम Cont r m एक वैकल्पिक उदाहरण दे सकते हैं यदि m के माध्यम से

empty = Cont $ \f -> empty 
ca <|> cb = Cont $ \f -> run ca f <|> run cb f 

और फिर Alternative का एक सदस्य है some और many अनुमति देते हैं उनके डिफ़ॉल्ट पर लेने के लिए निर्धारित कर सकते हैं तरीकों। मेरे सवाल है, हम डिफ़ॉल्ट परिभाषाओं के बजाय, m के some और many के मामले में some और many परिभाषित कर सकते हैं? स्पष्ट रूप से स्पष्ट विकल्प

some ca = Cont $ \f -> some $ run ca f 
many ca = Cont $ \f -> many $ run ca f 

स्पष्ट रूप से काम नहीं करते हैं (वे चेक भी टाइप नहीं करते हैं)। क्या उनका उपयोग करने का कोई और तरीका है (अगर हमें m की आवश्यकता है तो यह एक मोनड भी है, यह ठीक है)?

संदर्भ के लिए, some और many समीकरणों को कम से कम समाधान करना होगा:

  • some v = (:) <$> v <*> many v
  • many v = some v <|> pure []

यह मानते हुए कि some :: m a -> m [a] और many :: m a -> [a] इस कानून को संतुष्ट है, तो चाहिए some :: Cont r m a -> Cont r m [a] और many :: Cont r m a -> Cont r m [a]

उत्तर

4

सं

से

(forall a. f a -> f [a]) -> 
(forall r. ((a -> f r) -> f r)) -> (([a] -> f r) -> f r)` 

कोई तीर है कि एक दिलचस्प तरीके से अपने तर्क का उपयोग करता है मौजूद है।

केवल जगह forall a. f a -> f [a] लागू किया जा सकता एक f r है। ये (a -> f r) -> f r के परिणाम हैं, जैसे आपके "स्पष्ट विकल्प" और ([a] -> f r)। यह f [r] प्रकार का परिणाम छोड़ देता है। केवल बात यह है कि एक forall r. Alternative f => f [r] साथ किया जा सकता एक f r निर्माण करने के लिए कुछ अन्य कोई बड़ा प्राकृतिक संख्या के लिए एक प्राकृतिक संख्या से कुछ आंशिक समारोह forall r. [r] -> r साथ सूचकांक f [r] है।

+0

तो 'r' कुछ अतिरिक्त संरचना ने हालांकि शायद कुछ किया जा सकता है। उदाहरण के लिए शायद हम 'f [r]' को फोल्ड कर सकते हैं, और उपयुक्त समेकन कानूनों के साथ जो समकक्ष हो सकते हैं। – luqui

+0

मैं अलग होना चाहता हूं। 'कुछ ca = Cont $ \ fla -> ca $ \ a -> (कुछ $ शुद्ध ए) >> = fla' दिलचस्प प्रकार है। सवाल यह है कि क्या यह वैध 'कुछ' उदाहरण है। – PyRulez

+0

आप केवल 'वैकल्पिक एफ' बाधा के साथ 'f [a]' 'कुछ $ शुद्ध ए 'की तरह' [a] 'प्राप्त नहीं कर सकते हैं। इसके साथ आपको कुछ करने के लिए आपको 'मोनाड एफ' या 'ट्रैवर्सबल एफ' की आवश्यकता है। – Cirdec

संबंधित मुद्दे