की रिकर्सन-स्कीम सामान्यीकरण मुझे एक रिकर्सन-स्कीम शैली संरचना मिल गई है और मैं पूर्ण संरचना समेत सभी संरचनाओं की एक सूची प्राप्त करना चाहता हूं - यानी tails
फ़ंक्शन List
पर फ़ंक्शन करता है । मुझे लगता है कि para
पर कॉल करके इसे लागू करना संभव होगा, प्रत्येक चरण में मूल संरचना पर वापस मैप करना होगा, और उसके बाद मूल संरचना को अलग से चिपकाएं, लेकिन यह बहुत बोझिल लगता है: (अवांछित, मास्कल अगर मास्कल गलत है; एक सामान्यीकरण) Mu
के संदर्भ में लिखा के रूप में मैं वास्तव में Base
निर्माण अभी तक)'पूंछ'
gtails :: Functor f => Mu f -> [Mu f]
gtails = para (\a -> (fmap fst a) : (foldMap snd a))
(यानी मामला f=Prim
में यह है tails
समझा नहीं जा सका है, अन्य f
के लिए इतना ही
वहाँ एक अच्छा तरीका है ? मुझे एहसास है कि यह इतना बुरा नहीं है, लेकिन fmap fst a
उस चरण में "मूल" संरचना को पुनर्प्राप्त करने के लिए काफी बोझिल लगता है, और foldMap snd a
कुछ ऐसा है जो मुझे para
(fold a
का उपयोग करते समय का उपयोग करते समय बहुत कुछ दोहराता है जो फिर से लगता है यह अनावश्यक होना चाहिए)।
मैं प्रत्यावर्तन-योजनाओं के मामले में एक संस्करण की आवश्यकता:
हम तो
tails
para
और एक अतिरिक्तFoldable
बाधा हमेंfoldMap
उपयोग करने के लिए सूची monoid में मध्यवर्ती परिणाम एकत्रित करने की अनुमति का उपयोग कर लागू कर सकते हैं क्योंकि मेरा वास्तविक मामला 'सूची' नहीं है बल्कि एक पुनरावर्तन-योजना शैली संरचना है। एआईयूआई रिकर्सन-स्कीम 'पैरा' है पैरा :: फोल्डबल टी => (बेस टी (टी, ए) -> ए) -> टी -> ए 'जिसमें आपके उदाहरण से' बी' पैरामीटर नहीं है। क्या आप इस 'पैरा' (या अन्य रिकर्सन-स्कीम कोड) के मामले में एक संस्करण दे सकते हैं जो 'पूंछ' है यदि हम इसे 'tfa = maybe (a, f)' कहते हैं (इस अर्थ में कि 'बेस टी' है तब 'सूची' के लिए isomorphic, जब तक कि मैं गलत नहीं हूँ) लेकिन अन्य 'टी' के साथ भी बुलाया जा सकता है? – lmm@lmm संपादित देखें; मुझे आशा है कि यही तुम्हारा मतलब है। –
'प्राइम 'एक' सूची '-विशिष्ट चीज प्रतीत होता है, जबकि मुझे एक संस्करण चाहिए जो गैर-सूची डेटा संरचनाओं के लिए काम करता है, और मुझे नहीं लगता कि मैं हमेशा' बेस टी ~ प्राइम [ए]' ? जिस फ़ंक्शन के बारे में मैं सोच रहा हूं उसे किसी भी अतिरिक्त बाधा की आवश्यकता नहीं है - मैंने एक कार्यान्वयन के साथ प्रश्न को अद्यतन किया है जो मुझे लगता है कि वैध होगा (लेकिन जो मैं एक मानक कार्य होने की अपेक्षा करता हूं, या कम से कम मेरे संक्षिप्त संस्करण)। – lmm