2010-05-15 15 views
8

मैं टेक्स्ट.एक्सएमएल.लाइट का उपयोग करके एक एक्सएमएल (डी) धारावाहिक लिख रहा हूं और अपने बॉयलरप्लेट को स्क्रैप कर रहा हूं (http://github.com/finnsson/Text.XML.Generic पर) और अब तक मुझे "सामान्य" एडीटी के लिए कोड मिल रहा है लेकिन मैं अटक गया हूं अस्तित्व में deserializing।अस्तित्व और स्क्रैप अपने बॉयलरप्लेट

मैं अस्तित्व डेटा प्रकार

data DataBox where 
    DataBox :: (Show d, Eq d, Data d) => d -> DataBox 

मिला है और मैं इस

instance Data DataBox where 
    gfoldl k z (DataBox d) = z DataBox `k` d 
    gunfold k z c = k (z DataBox) -- not OK 
    toConstr (DataBox d) = toConstr d 
    dataTypeOf (DataBox d) = dataTypeOf d 

संकलित करने के लिए प्राप्त करने के लिए कोशिश कर रहा हूँ, लेकिन मैं समझ नहीं DataBox के लिए gunfold लागू करने के लिए कैसे।

त्रुटि संदेश

Text/XML/Generic.hs:274:23: 
    Ambiguous type variable `b' in the constraints: 
     `Eq b' 
     arising from a use of `DataBox' at Text/XML/Generic.hs:274:23-29 
     `Show b' 
     arising from a use of `DataBox' at Text/XML/Generic.hs:274:23-29 
     `Data b' arising from a use of `k' at Text/XML/Generic.hs:274:18-30 
    Probable fix: add a type signature that fixes these type variable(s) 

यह b के डेटा प्रकार यह पता लगाने में सक्षम नहीं होने के बारे में शिकायत कर रहा है।

मैं dataCast1 और dataCast2 को लागू करने की भी कोशिश कर रहा हूं लेकिन मुझे लगता है कि मैं उनके बिना रह सकता हूं (यानी गलत कार्यान्वयन)।

मैं अपने सवाल लगता है कि कर रहे हैं:

  1. यह स्क्रैप अपने बॉयलरप्लेट साथ existentials गठबंधन करने के लिए संभव है?
  2. यदि ऐसा है: तो आप एक मौजूदा डेटा प्रकार के लिए गनफ़ोल्ड को कैसे कार्यान्वित करते हैं?

उत्तर

6

क्या आपके बॉयलरप्लेट को स्क्रैप के साथ जीएडीटी को गठबंधन करना संभव है?

मुझे लगता है कि आपको हैकेल-कैफे @ पूछने की आवश्यकता होगी। यह संभवतः एक शोध सवाल है।

+0

+1: http://www.mail-archive.com/[email protected]/msg75780.html –

+0

टिप के लिए धन्यवाद। मेरी वर्तमान शर्त यह है कि जोसे पेड्रो मगलाह सही थे, यानी (1) का जवाब "नहीं" है। – finnsson

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