2011-12-16 19 views
14

में एक उदाहरण घोषणा जोड़ सकता हूं, मैं HashMap के साथ गड़बड़ कर रहा था और एक कुंजी के रूप में Data.Bson.ObjectId का उपयोग करने का प्रयास किया। मैंने, निश्चित रूप से, यह पाया कि उस संरचना के लिए Hashable उदाहरण नहीं है। यह ठीक है, क्योंकि एक लिखना तुच्छ है।क्या मैं जीएचसीआई

instance Hashable ObjectId where hash (Oid x y) = hash (x,y) 

मैं GHCi में है कि रेखा टाइप किया और बताया गया था "इनपुट` उदाहरण 'पर त्रुटि पार्स "। यह वास्तव में समझ में आता है क्योंकि जीएचसीआई प्रॉम्प्ट इस तरह काम करता है जैसे लाइनों को आईओ मोनैड में एक ब्लॉक में टाइप किया जा रहा है और इस संदर्भ में एक उदाहरण परिभाषित नहीं किया जा सकता है।

मेरा प्रश्न तो, क्या जीएचसीआई के भीतर एक नया उदाहरण परिभाषित करने का कोई तरीका है?


क्यों इस उदाहरण पुस्तकालय द्वारा प्रदान की नहीं है अलग बात है। मेरा मानना ​​है कि उत्तर निर्भरताओं को सीमित करना था सिवाय इसके कि बीएसओ पैकेज पहले से ही सूर्य के नीचे सबकुछ पर निर्भर करता है।

उत्तर

14

अच्छी खबर: हां, जीएचसीआई के भीतर एक नया उदाहरण परिभाषित करने का एक तरीका है।

बुरी खबर: फिलहाल, ऐसा करने में पहला कदम "जीएचसी का विकास स्नैपशॉट इंस्टॉल करें" है।

यह थोड़ी देर के लिए जीएचसीआई में अनुपलब्ध कार्यक्षमता का एक स्पष्ट बिट रहा है। अनुपस्थित होने के लिए कोई अंतर्निहित कारण नहीं था, लेकिन मुझे लगता है कि इसे कार्यान्वित करना मुश्किल था और इसलिए इसे अलग कर दिया गया।

GHCi आप भी डेटा, प्रकार, newtype, वर्ग, उदाहरण के लिए, पाने, और विदेशी घोषणाओं सहित किसी भी शीर्ष स्तर के हास्केल घोषणा, प्रवेश कर सकते हैं संकेत:

हालांकि, यह है कि as of version 7.4.1, it's now available लगता है। उदाहरण के लिए:

Prelude> data T = A | B | C deriving (Eq, Ord, Show, Enum) 
Prelude> [A ..] 
[A,B,C] 
Prelude> :i T 
data T = A | B | C  -- Defined at <interactive>:2:6 
instance Enum T -- Defined at <interactive>:2:45 
instance Eq T -- Defined at <interactive>:2:30 
instance Ord T -- Defined at <interactive>:2:34 
instance Show T -- Defined at <interactive>:2:39 

चाहे आप होने लगता है कि अभी लायक GHC की एक गैर रिलीज़ संस्करण स्थापित करने की परेशानी आप पर निर्भर है।

संबंधित मुद्दे