recursion-schemes
पैकेज में हम तथ्य यह है कि एक (सख्ती से पॉजिटिव) बीजीय डेटा प्रकारबीजगणितीय प्रकार केवल प्रारंभिक बीजगणित (या वीज़ा बनाम) क्यों होगा?
- एक हस्ताक्षर functor है व्यक्त कर सकते हैं,
f
- प्रारंभिक
f
-algebra है, और - अंतिम है
f
-coalgebra
उदाहरण के लिए, हम ऐसा [a]
के लिए निम्न कोड
-- (1) define and declare the signature functor, here called Base
data instance Prim [a] x = Nil | Cons a x deriving Functor
type instance Base [a] = Prim [a]
-- (2) demonstrate the initial algebra
instance Foldable [a] where
project [] = Nil
project (a:as) = Cons a as
-- (3) demonstrate the final coalgebra
instance Unfoldable [a] where
embed Nil = []
embed (Cons a as) = a:as
विशेष रूप से, किसी भी प्रकार के लिए जहां हमारे पास (1), (2), और (3) हमें (project, embed)
गवाहों को एक आइसोमोर्फिज्म होना चाहिए।
यह मेरी समझ है कि डेटा प्रकार बड़े (या कम से कम सख्ती से पॉजिटिव) हमेशा कुछ हस्ताक्षरकर्ता के अंतिम/प्रारंभिक सह/बीजगणित होते हैं-वास्तव में, वे हमेशा दोनों होते हैं।
तो मेरा सवाल है: Foldable
और अलग वर्गों के रूप में क्यों है? डेटा प्रकार कब एक या दूसरे होगा?
वर्तमान में मैं कल्पना कर सकता हूं कि यह सार डेटा प्रकारों के लिए मूल्यवान हो सकता है जो केवल तह या अस्थायी इंटरफेस प्रदान करना चाहते हैं, लेकिन क्या अन्य बार भी हैं?
क्या हमें किसी भी प्रकार के लिए पारस्परिक बीजगणित और कोयलाग्रा को परिभाषित करना आवश्यक है? क्या यह संभव हो सकता है कि किसी प्रकार के लिए, कोई मूल्य बनाने के लिए बीजगणित को परिभाषित करना चाहता है, और कोयलेब्रा को संसाधित करने के लिए (और केवल उन्हें 'दोहराया' नहीं)? – didierc
आप निश्चित रूप से कर सकते हैं, इसका मतलब यह होगा कि आपके प्रकट होने वाले संभावित मूल्यों के उप-समूह में प्रकट होते हैं और फ़ोल्डर्स संभव डेटा के उप-समूह को "दृश्य" देखते हैं-यह लगभग निश्चित रूप से एक सार डेटा प्रकार में होता है (अन्यथा यह बिल्कुल सार क्यों है?) । 'फोल्डबल'/'अनफोल्डबल' के इच्छित अर्थों पर मेरा पढ़ना यह है कि 'बेस' फंक्चर वास्तव में इस प्रकार के हस्ताक्षर फ़ैक्टर होना चाहिए और इस प्रकार वे पारस्परिक हैं। –
ऐसा लगता है कि 'फोल्डबल' और 'अनफोल्डबल' क्रमशः प्रारंभिक या अंतिम नहीं, क्रमशः बीजगणित और कोलेजब्रस के रूप में डेटाटाइप प्रदर्शित करने के लिए हैं। (शायद यह है कि @didierc भी कह रहा था।) –