2013-04-22 6 views
6

का उपयोग कर एसन के वैल्यू प्रकार को स्टोर करना चाहता हूं, मैं एसन वैल्यूज यूएसग एसिड-स्टोर स्टोर करना चाहता हूं। मैंने एक न्यूनतम एसिड कार्यान्वयन लिया है और मूल्यों को मूल्य पर स्विच करने की कोशिश की है। ये deriveSafeCopy मेरे कॉल कर रहे हैं:मैं एसिड

$(deriveSafeCopy 0 'base ''Object) 
$(deriveSafeCopy 0 'base ''Array) 
$(deriveSafeCopy 0 'base ''Number) 
$(deriveSafeCopy 0 'base ''Value) 
$(deriveSafeCopy 0 'base ''JSONState) 
$(deriveSafeCopy 0 'base ''JSONStateStore) 

JSONState और JSONStateStore अपने ही प्रकार के होते हैं। मैं इस त्रुटि मिलती है:

Can't derive SafeCopy instance for: (Data.Aeson.Types.Internal.Object,TyConI (TySynD Data.Aeson.Types.Internal.Object [] (AppT (AppT (ConT Data.HashMap.Base.HashMap) (ConT Data.Text.Internal.Text)) (ConT Data.Aeson.Types.Internal.Value)))) 
+0

धन्यवाद - आपको लगता है मैं सवाल से अद्यतन को निकालने चाहिए? मैं एसओ शिष्टाचार के बारे में निश्चित नहीं हूँ। – schellsan

उत्तर

3

जाहिर है कि तुम क्या deriveSafeCopy खाका हास्केल समारोह आप के लिए क्या कर सकते हैं की सीमा तक पहुंच गए हैं।

आप मैन्युअल रूप से उदाहरण प्रदान करके समस्या को हल कर सकते हैं। SafeCopy API में ऐसा करने के तरीके पर व्यापक दस्तावेज़ शामिल हैं। अतिरिक्त उदाहरणों के लिए आप how the default instances are declared देख सकते हैं।

+0

धन्यवाद निकिता, यही मेरी अपेक्षा है। मुझे लगता है कि मुझे इसे किसी से सुनने की ज़रूरत है। सही दिशा में धक्का के लिए धन्यवाद। – schellsan

+0

मैंने ऊपर अपना समाधान जोड़ा। – schellsan

3

यहाँ जो लोग अभी भी रुचि रखते हैं के लिए मेरे दिया गया है:

-- | ACID 

$(deriveSafeCopy 0 'base ''JSONStateStore) 
$(deriveSafeCopy 0 'base ''JSONState) 
$(deriveSafeCopy 0 'base ''Value) 
$(deriveSafeCopy 0 'base ''Number) 

-- | An instance of SafeCopy for the Array Value. 
instance SafeCopy a => SafeCopy (V.Vector a) where 
    getCopy = contain $ fmap V.fromList safeGet 
    putCopy = putCopy . V.toList 

-- | An instance of SafeCopy for the Object Value. 
instance (SafeCopy a, Eq a, Hashable a, SafeCopy b) => SafeCopy (H.HashMap a b) where 
    getCopy = contain $ fmap H.fromList safeGet 
    putCopy = contain . safePut . H.toList 
+0

पुटकोपी परिभाषाएं गलत हैं और उम्मीद के अनुसार काम नहीं करेंगे। हालांकि वे संकलित करेंगे, इसलिए यह काफी खतरनाक है। सही putCopy कार्यान्वयन होना चाहिए (युक्त। सुरक्षितपटल। सूची) – Reite

+0

धन्यवाद - अद्यतन। – schellsan