यदि मैं Identity
के लिए मोनैड ट्रांसफार्मर प्रकार को परिभाषित करता हूं, तो यह Show
उदाहरण प्राप्त करने में सक्षम है।शायद उदाहरण के लिए शो उदाहरण क्यों नहीं लिया जा सकता है?
newtype IdentityT f a =
IdentityT { runIdentityT :: f a }
deriving (Show)
instance Show (f a) => Show (IdentityT f a)
प्राप्त होगा लेकिन अगर मैं के लिए Maybe
newtype MaybeT m a =
MaybeT { runMaybeT :: m (Maybe a) }
deriving (Show)
इकाई ट्रांसफार्मर के प्रकार को परिभाषित मैं त्रुटि मिलती है
• No instance for (Show (m (Maybe a)))
arising from the first field of ‘MaybeT’ (type ‘m (Maybe a)’)
के बाद से 0 एक Show
उदाहरण है, मैं इसे काम करते हैं और प्राप्त करने के लिए उम्मीद करेंगे
instance Show (m (Maybe a)) => Show (MaybeT m a)
क्यों नहीं कर सकते?
लेकिन इसके दूसरे सुझाव, 'UndecidableInstances' को सक्षम करने के लिए, बिल्कुल ठीक है। – dfeuer
इसलिए मैं संकलक को मेरे लिए उदाहरण प्राप्त करने के लिए 'UndecidableInstances' का उपयोग कर सकता हूं, लेकिन' हो सकता है 'प्रकार के बारे में क्या यह बिना किसी पहचान के अक्षम हो जाता है, जबकि यह' पहचान प्रकार 'प्रकार को ठीक से संभाल सकता है? पूर्व। मैं उम्मीद करता हूं कि यह बिना किसी एक्सटेंशन के 'होटटी [बस 1]' दिखाने में सक्षम होगा – robertjlooby