मान लीजिए मैं निम्नलिखित कोड है:मैं डेटा के उदाहरण उत्पन्न करने के लिए जीएचसी कैसे प्राप्त कर सकता हूं। संदर्भ में टाइप करने योग्य जीएडीटी के लिए उपयुक्त?
{-# LANGUAGE GADTs, DeriveDataTypeable, StandaloneDeriving #-}
import Data.Typeable
class Eq t => OnlyEq t
class (Eq t, Typeable t) => BothEqAndTypeable t
data Wrapper a where
Wrap :: BothEqAndTypeable a => a -> Wrapper a
deriving instance Eq (Wrapper a)
deriving instance Typeable1 Wrapper
तब, निम्न उदाहरण घोषणा काम करता है, बिनाt
पर एक बाधा:
instance OnlyEq (Wrapper t)
और मैं इसे करने की उम्मीद क्या करता है।
लेकिन निम्नलिखित उदाहरण घोषणा काम नहीं करता:
instance BothEqAndTypeable (Wrapper t)
GHC के बाद से - - मैं 7.6.1 का उपयोग कर रहा है कि शिकायत:
No instance for (Typeable t)
arising from the superclasses of an instance declaration
Possible fix:
add (Typeable t) to the context of the instance declaration
In the instance declaration for `BothEqAndTypeable (Wrapper t)'
संदर्भ के लिए Typeable t
जोड़ना काम करता है, ज़ाहिर है। लेकिन इसलिए निम्न उदाहरण जोड़ना:
instance Typeable (Wrapper t) where
typeOf (Wrap x) = typeOf1 (Wrap x) `mkAppTy` typeOf x
क्या जीएचसी मेरे लिए यह बाद का उदाहरण लिखने का कोई तरीका है? यदि हां, तो कैसे? यदि नहीं, तो क्यों नहीं?
मुझे उम्मीद थी GHC Wrap
निर्माता पर संदर्भ से Typeable
बाधा खींचने के लिए, बस के रूप में यह Eq
बाधा के साथ किया था सक्षम होगा। मुझे लगता है कि मेरी समस्याएं इस तथ्य को उबालती हैं कि जीएचसी स्पष्ट रूप से deriving instance Typeable (Wrapper t)
लिखने की अनुमति नहीं देता है, और मानक (Typeable1 s, Typeable a) => Typeable (s a)
उदाहरण Typeable a
शब्दकोश खोजने के लिए s a
पर 'अंदर देखो' नहीं हो सकता है।
ठीक है, मैं 'अपरिभाषित' के बेहतर बिंदुओं के बारे में भूल रहा हूं क्योंकि मैं आमतौर पर अपने डेटाटाइप में कुछ संग्रहीत करता हूं :-) मुझे लगता है कि मुझे किसी प्रकार की 'न्यूटाइप' जीएडीटी की आवश्यकता है! और एक अतिरिक्त सवाल, यदि मैं कर सकता हूं: अनजान 'टाइप करने योग्य (रैपर टी)' उदाहरण है जिसे मैंने किसी भी तरह से खराब लिखा है, बशर्ते मुझे परवाह नहीं है कि 'टाइपऑफ (त्रुटि "आर्ग" :: रैपर बूल)' बोतलों को बाहर रखा गया है? – yatima2975
ठीक है, यह थोड़ा आश्चर्यजनक उदाहरण है क्योंकि आप इसे 'अपरिभाषित :: रैपर बूल' के साथ अन्य 'टाइप करने योग्य' उदाहरणों के साथ उपयोग नहीं कर सकते हैं। यदि आप इसे सार्वजनिक करते हैं, तो कम से कम इस पर चेतावनी दें। लेकिन मुझे नहीं लगता कि आपको जरूरी रूप से रोकना चाहिए। भविष्य में जीएचसी रिलीज करता है, हालांकि - 7.8 से आगे के मेथिंक, सभी 'टाइप करने योग्य' उदाहरण जीएचसी द्वारा प्रदान किए जाएंगे, और सभी प्रकार के लिए, आईआईआरसी। तो आपको तब ऐसी समस्याओं से निपटने की ज़रूरत नहीं होगी। –
भंडार को देखते हुए, आपको '-XAutoDeriveTypeable' की आवश्यकता होगी। ठंडा! मुझे लगता है कि मैं * सप्ताहांत में बस 7.8.1 क्लोन और क्लोन कर सकता हूं, लेकिन आखिरी बार जब मैंने जीएचसी बनाया था 2002 में (शुरुआती 6.x चक्र?), तो यह थोड़ा डरावना है ... लेकिन फिर से धन्यवाद! – yatima2975