हम निरंतरता इकाई ट्रांसफार्मरक्या निरंतरता मोनैड ट्रांसफॉर्मर को कुछ और कई के साथ वैकल्पिक उदाहरण दिया जा सकता है?
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]
।
तो 'r' कुछ अतिरिक्त संरचना ने हालांकि शायद कुछ किया जा सकता है। उदाहरण के लिए शायद हम 'f [r]' को फोल्ड कर सकते हैं, और उपयुक्त समेकन कानूनों के साथ जो समकक्ष हो सकते हैं। – luqui
मैं अलग होना चाहता हूं। 'कुछ ca = Cont $ \ fla -> ca $ \ a -> (कुछ $ शुद्ध ए) >> = fla' दिलचस्प प्रकार है। सवाल यह है कि क्या यह वैध 'कुछ' उदाहरण है। – PyRulez
आप केवल 'वैकल्पिक एफ' बाधा के साथ 'f [a]' 'कुछ $ शुद्ध ए 'की तरह' [a] 'प्राप्त नहीं कर सकते हैं। इसके साथ आपको कुछ करने के लिए आपको 'मोनाड एफ' या 'ट्रैवर्सबल एफ' की आवश्यकता है। – Cirdec