2013-10-11 9 views
5

निम्न कोड के साथ एक डेटा पेड़ के लिए एक तह उदाहरण बनाने के लिए कोशिश कर रहा है:हास्केल तह उदाहरण

data Rose a = a :> [Rose a] 
    deriving (Eq, Show) 

instance Foldable Rose where 
    fold (a:>b) = a <> (map fold b) 

हालांकि इस कोड काम नहीं कर रहा, त्रुटि यह पैदा करता है:

Could not deduce <m ~ [m]> 
from the context <Monoid m> 
    bount by the type signature for fold :: Monoid m => Rose m -> m 
... 
In the return type of a call of 'map' 
... 

क्या कोई जानता है कि इसे क्यों/कैसे काम करना है?

+0

«काम नहीं कर रहा है» वास्तव में उपयोगी नहीं है। क्या यह टाइप चेक नहीं करता है? तब त्रुटि संदेश क्या है? या क्या यह गलत परिणाम उत्पन्न करता है? किस इनपुट पर? –

+0

त्रुटि संदेश के साथ मेरी पोस्ट संपादित की गई मुझे – Skyfe

+0

क्या आप समझते हैं कि त्रुटि संदेश क्या कहता है? यदि आप इसे धीरे-धीरे पढ़ते हैं, तो मैं शर्त लगाता हूं कि आपको पता चलेगा कि आपकी समस्या को कैसे ठीक किया जाए। यदि नहीं, तो आपको यह भी कहना चाहिए कि उस त्रुटि का कौन सा हिस्सा आपको समझ में नहीं आता है। –

उत्तर

6

जब आप fold b लिखते हैं, आप सूचियों के लिए Foldable उदाहरण का उपयोग कर रहे हैं। तो fold एक मान पर monoidal मानों की एक सूची folds। इस monoidal मान का प्रकार Rose a होता है (यही आपकी सूची में शामिल है)। लेकिन शायद यह नहीं है कि आप क्या चाहते हैं।

वहाँ foldMap fold बजाय fold उपयोग करने के लिए प्रयास करें। इस तरह आप पहली बार सूची में प्रत्येक व्यक्ति Rose a को फोल्ड करते हैं, और उसके बाद परिणामों को एक साथ जोड़ते हैं।

+0

धन्यवाद कि काम किया! – Skyfe

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