मेरे पास ErrorT
सहित एक मोनड ट्रांसफार्मर स्टैक है और मैं पूरी चीज के आसपास ContT r
ट्रांसफॉर्मर लपेटना चाहता हूं। जब मैं ऐसा करने का प्रयास करता हूं, तो throwError
पर मेरी कॉल प्रकार त्रुटियां उत्पन्न करती है - जाहिर है ContT r
स्वचालित रूप से MonadError
का उदाहरण नहीं है। ठीक है, मैंने सोचा था कि - मैं सिर्फ एक में बना देंगे: liftCatch
के कुछ उपयुक्त परिभाषा का उपयोगकंटेंट को MonadError का उदाहरण क्यों नहीं बनाया जा सकता है?
instance MonadError e m => MonadError e (ContT r m) where
throwError = lift . throwError
catchError = liftCatch . catchError
। मैं UndecidableInstances pragma (मैं धारणा है कि यह बहुत चिंताजनक नहीं है के तहत हूं, जैसे देखने this question) का उपयोग करने के लिए खुश हूँ
src\Language\Types.hs:68:10:
Illegal instance declaration for `MonadError e (ContT r m)'
(the Coverage Condition fails for one of the functional dependencies;
Use -XUndecidableInstances to permit this)
In the instance declaration for `MonadError e (ContT r m)'
लेकिन अगर वहाँ बनाने में कठिनाई था मैंने सोचा: लेकिन अब मैं जब संकलन त्रुटियों मिल MonadError
के उदाहरण में निरंतरता ट्रांसफार्मर - मुझे लगता है कि अगर यह ठीक था, तो Control.Monad.Trans
पैकेज के लेखकों ने इसे पहले से ही किया होगा ... सही?
यह ठीक है, लेकिन करता है ट्रांसफॉर्मर्स लाइब्रेरी के लेखकों के लिए बेहद खतरनाक और गैर-पोर्टेबल है जो अनिश्चित वित्तीय लेते हैं। –