यह आवश्यक प्रकारों का अनुमान लगाता है।
यह एक instance
परिभाषा का अर्थ है कि हम
returnMaybeT :: Monad m => a -> MaybeT m a
returnMaybeT x = MaybeT (return (return x))
परिभाषित करने के लिए MaybeT :: m (Maybe a) -> MaybeT a
(एक समारोह के रूप में लिया) हम जानते हैं कि return
रों के भीतरी ढेर होना आवश्यक है के बाद से कोशिश कर रहे हैं से स्पष्ट है प्रकार
return (return x) :: Monad m => a -> m (Maybe a)
अब, हम जानते हैं कि return
एक बहुरूपी समारोह जो
की तरह एक प्रकार है 10
के लिएMonad
n
। इस पहले return
के मामले में, Monad m =>
बाधा हमें बताती है कि m
Monad
है और इसलिए हम इसकी वापसी की परिभाषा का उपयोग कर सकते हैं। यह हमारे भीतर की return
return x :: a -> Maybe a
करने के लिए नीचे सभी तरह से प्राप्त करने देता है और जब से हम जानते हैं Maybe
एक Monad
उदाहरण है कि हम उस से return
उपयोग कर सकते हैं।
अंत में, सभी संकलक करना है छीलना अभिव्यक्ति प्रकार प्रत्येक return
पर की जरूरत निर्धारित करने के लिए कोशिश कर नीचे अपना रास्ता है। यह आवश्यक प्रकार निर्धारित करने के बाद इसे जांचना होगा कि क्या यह उस प्रकार के Monad
उदाहरण को जानता है। Maybe
के लिए यह आसान है, क्योंकि यह ठोस है, लेकिन m
के लिए थोड़ा और मुश्किल देखना है क्योंकि यह केवल एक चर है।
कारण m
काम करता है क्योंकि हम चर विवश कर दिया है निश्चित रूप से कुछ प्रकार है जो Monad
को दर्शाता हो रहा है।
स्रोत
2014-07-20 15:45:06
अंतिम पंक्ति पर पहली बार वापसी नहीं होनी चाहिए 'शायद ए -> एम (शायद ए)' या अधिक सामान्य 'बी -> एम बी' 'बी ~ हो सकता है' के साथ? – Laar
@ लायर तकनीकी रूप से हां, लेकिन यह इस तरह से इलाज करने के लिए आसान (और नैतिक रूप से समकक्ष) है। – jozefg