2014-09-26 9 views
9

हैकेज में कहीं भी MonadIO के समान एक टाइपक्लास है, लेकिन Applicative एस के लिए, जो IO क्रियाओं को पर "applicative composition stacks" पर आसानी से उठाने की अनुमति देता है?क्या कोई "आवेदक" वर्ग है?

यदि ऐसा टाइपक्लास अस्तित्व में था, तो इसे Applicative-Monad Proposal के कार्यान्वयन से अप्रचलित कर दिया जाएगा? क्या प्रस्ताव में बाधा MonadIO के लिए बाधा शामिल है?

+1

मुझे लगता है कि 'मोनाद' बाधा को आराम देने पर विचार करना उचित है। –

+3

यदि लोग सोच रहे हैं, तो कानून 'लिफ्टएआईओ (शुद्ध आर) = शुद्ध आर' और 'लिफ्टएआईओ (एफ <*> एक्स) = लिफ्टएआईओ एफ <*> लिफ्टएआईओ x' –

+0

मुझे लगता है कि सवाल का जवाब है" क्या हैकेज में कहीं कहीं है Monadio के लिए समान टाइपक्लास लेकिन आवेदन के लिए? " "नहीं" (मुझे कम से कम कुछ भी नहीं मिला), लेकिन इसका मतलब यह नहीं है कि @ गैब्रियल गोंज़ालेज़ किसी बिंदु पर इसके बारे में ब्लॉग पोस्ट नहीं लिखेंगे। – bheklilr

उत्तर

4

एक साल पहले a related discussion on haskell-cafe था। Reddit comments में मैंने एक प्राकृतिक परिवर्तन (g) के प्राकृतिक परिवर्तन (g) के an example को एक आवेदक फंक्चर मॉर्फिज्म (यानी, गैब्रियल गोंजालेज का उल्लेख किया है) को पूरा करता है लेकिन यह एक मोनड मॉर्फिज्म नहीं है (यह संबंधित अतिरिक्त कानून को संतुष्ट नहीं करता है >>=)। तो, एएमपी के साथ भी दुनिया में, ApplicativeIO m और MonadIO m वास्तव में अलग-अलग चीजें हैं, भले ही mMonad है!

एक आदर्श दुनिया में आप इस तरह एक सेटअप होगा:

class Functor f => FunctorIO f where 
    liftIO :: IO a -> f a 
    -- such that liftIO is a natural transformation (automatic, by parametricity) 

class (Applicative f, FunctorIO f) => ApplicativeIO f where 
    -- ... and liftIO is an applicative functor morphism 

class (Monad f, ApplicativeIO f) => MonadIO f where 
    -- ... and liftIO is a monad morphism 

और जादुई परियों वास्तव में ApplicativeIO और MonadIO उदाहरणों को परिभाषित करेगा जब इसी कानून संतुष्ट थे।

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