14
हम कैसे साबित कर सकते हैं कि the continuation monad का MonadFix
का कोई वैध उदाहरण नहीं है?निरंतरता मोनाड के लिए मोनाडफिक्स का उदाहरण क्यों नहीं हो सकता है?
हम कैसे साबित कर सकते हैं कि the continuation monad का MonadFix
का कोई वैध उदाहरण नहीं है?निरंतरता मोनाड के लिए मोनाडफिक्स का उदाहरण क्यों नहीं हो सकता है?
वास्तव में, ऐसा नहीं है कि MonadFix
उदाहरण नहीं हो सकता है, बस लाइब्रेरी का प्रकार थोड़ा बाध्य है। आप सभी संभावित r
रों अधिक ContT
निर्धारित करते हैं तो न केवल MonadFix
संभव हो जाता है, लेकिन ऊपर Monad
के सभी उदाहरणों अंतर्निहित functor का कुछ भी नहीं की आवश्यकता होती है:
newtype ContT m a = ContT { runContT :: forall r. (a -> m r) -> m r }
instance Functor (ContT m) where
fmap f (ContT k) = ContT (\kb -> k (kb . f))
instance Monad (ContT m) where
return a = ContT ($a)
join (ContT kk) = ContT (\ka -> kk (\(ContT k) -> k ka))
instance MonadFix m => MonadFix (ContT m) where
mfix f = ContT (\ka -> mfixing (\a -> runContT (f a) ka<&>(,a)))
where mfixing f = fst <$> mfix (\ ~(_,a) -> f a)
ऐसा लगता है कि अपने प्रकार वास्तव में अधिक कंस्ट्रेन्ड से एक है। क्या ऐसी वास्तविक परिस्थितियां हैं जहां बहुलक होने के लिए 'कंट्रोल' को तर्क को मजबूर करना उपयोगी कार्यान्वयन को अवरुद्ध करेगा? यदि नहीं, तो शायद यह इतिहास का मामला है- 'कॉन्ट टी' काफी समय से आसपास रहा है, संभवतः रैंक 2 प्रकार से पहले हास्केल का एक स्वीकार्य हिस्सा था। – dfeuer
पॉलिमॉर्फिक तर्क 'कंटटी' को 'कोडोडेंसी' के रूप में भी जाना जाता है। इसमें 'कॉलसीसी' को परिभाषित करने की क्षमता नहीं है। –
यह उत्तर बताता है कि आपका 'क्यों आर। (ए -> एम आर) -> एम आर '' कंटटी 'में' कॉलसीसी 'नहीं हो सकता है। http://stackoverflow.com/a/7180154/414413 – Cirdec