प्रश्न का विस्तार करने के लिए मैं इतना कुछ नहीं कर सकता। लेकिन यहाँ एक उपयोग मामला है: मान लीजिए कि आप दो इकाई ट्रांसफॉर्मर, t
और s
है, एक ही इकाई m
से अधिक बदलने करते हैं:क्या दो मोनैड ट्रांसफार्मर लिखने के लिए एक सिद्धांत है यदि वे अलग-अलग प्रकार के हैं, लेकिन उनका अंतर्निहित मोनड एक ही प्रकार का है?
master :: (MonadTrans t, Monad m) => t m a b
slave :: (MonadTrans t, Monad m) => s m a b
और मैं master
रचना करना चाहते हैं और slave
ऐसी है कि वे एक दूसरे के साथ संवाद कर सकते हैं जब m
प्राइमेटिव को t
और s
में हटाया गया है। हस्ताक्षर हो सकता है:
bound :: (MonadTrans t, MonadTrans s, Monad m, Monoid a) => t m a b -> s m a b -> (...)
But what is the type of (...) ?
एक उपयोग के मामले, sugared अंकन में:
master :: Monoid a => a -> t m a b
master a = do
a <- lift . send $ (a,False) -- * here master is passing function param to slave
... -- * do some logic with a
b <- lift . send $ (mempty,True) -- * master terminates slave, and get back result
slave :: Monoid a => (a -> b) -> s m a b
slave g = do
(a,end) <- lift receive
case end of
True -> get >>= \b -> exit b
_ -> (modify (++[g a])) >> slave g
अद्यतन: send
और receive
प्रकार m
की पुरातन हैं।
मैं क्षमा चाहता हूं कि यह उदाहरण दूषित दिखता है, या कोरआउट के समान दिखता है, प्रश्न की भावना के साथ वास्तव में इसके साथ कुछ लेना देना नहीं है, इसलिए कृपया सभी समानताओं को अनदेखा करें। लेकिन मुख्य बिंदु यह है कि मोनैड t
और s
को एक-दूसरे के साथ समझदारी से तैयार नहीं किया जा सका, लेकिन दोनों अंतर्निहित मोनाड m
को लपेटने के बाद, अब उन्हें एक ही समारोह के रूप में बनाया और चलाया जा सकता है। रचनात्मक कार्य के प्रकार के लिए, मुझे वास्तव में यकीन नहीं है कि कुछ दिशा की सराहना की जाती है। अब अगर यह अमूर्तता पहले से मौजूद है और मुझे इसके बारे में पता नहीं है, तो यह सबसे अच्छा होगा।
क्या 's' और' t' मनमानी हैं या वे किसी भी तरह से विशिष्ट हैं - क्या हम ऐसे 's' और' t' बनाने की कोशिश कर रहे हैं? और वही प्रश्न 'm' पर लागू होता है - इसके बारे में और इसके 'प्रेषण' और' प्राप्त' कैसे? –
हां '' 'और मनमानी हैं। 'm' वह विशिष्ट प्रकार है जिसे हम यहां बनाने की कोशिश कर रहे हैं। 'प्रेषण' और 'प्राप्त' क्रमशः '(ए, बूल) -> एम ए बी' और 'एम बी 'प्रकार के आदिम कार्य हैं। लेकिन वे मेरे द्वारा दिए गए प्रदूषित उपयोग मामले के लिए आकस्मिक हैं, उनके कार्यान्वयन का विवरण महत्वपूर्ण नहीं है। – chibro2