कुछ नहीं है यह विचार है कि हास्केल में एक बीजीय डेटाप्रकार का एक मूल्य के रूप
C x_1 x_2 ... x_n
जहां C
एक निर्माता है और x_i
हैं है तर्क क्या
gfoldl app con
करता
con C `app` x_1 `app` x_2 ... `app` x_n
में इस तरह के एक मूल्य के चालू करने के लिए इस तरह एक c a
में एक a
मोड़ है। मान लेते हैं C
के प्रकार
C :: T_1 -> T_2 -> ... -> T_n -> D
तो के मध्यवर्ती भाव के प्रकार को देखो
है करते हैं:
con C :: c (T_1 -> T_2 -> ... -> T_n -> D)
con C `app` x_1 :: c (T_2 -> ... -> T_n -> D)
con C `app` x_1 `app` x_2 :: c (... -> T_n -> D)
con C `app` x_1 `app` x_2 ... `app` x_n :: c D
parameterization c
पर इन सभी मध्यवर्ती प्रकार अलग होने की अनुमति देता है। अगर हम इसके बजाय gfoldl'
जैसे साधारण फोल्ड का उपयोग करेंगे, तो सभी इन मध्यवर्ती प्रकारों को समान होना होगा।
gfoldl
के लिए प्रेरणा एक एकल सामान्यीकरण आप SYB कार्यों gmapQ
और gmapT
(और कुछ अन्य लोगों) को व्यक्त करने देता है कि हो रहा है। gmapQ
और gmapT
के प्रकार हैं:
gmapQ :: Data a => (forall d. Data d => d -> u) -> a -> [u]
gmapT :: Data a => (forall b. Data b => b -> b) -> a -> a
जबकि gmapQ
u
रों के एक समान सूची में एक a
गिर और gfoldl'
का उपयोग कर व्यक्त किया जा सकता है, इस gmapT
के लिए संभव नहीं होगा।
हालांकि, gfoldl
के साथ, हम कुछ gmapT
की तरह है, और c = Const
gmapQ
की तरह कुछ पाने के लिए प्राप्त करने के लिए हमें सक्षम करने के लिए c = Identity
उपयोग कर सकते हैं।
अधिक जानकारी के लिए, आप भी कागज Scrap your boilerplate Reloaded जो दिखाता है कि gfoldl
एक साधारण (अभी तक उच्च क्रम) है पर देखने के एक डेटा-प्रकार है कि उस पत्र में Spine
कहा जाता है की गुना कर सकते हैं।
पहचान और निरंतर functors के उपयोग के लिए एक एकल अंतर्निहित प्रतिनिधित्व से दोनों रूपांतरित होने वाले और अद्यतन करने व्यवहार प्राप्त करने के लिए कैसे आप "वैन Laarhoven" लेंस से लेंस संचालन प्राप्त करने के लिए कुछ समानता है।
"सी 'पर पैरामीटरकरण इन सभी मध्यवर्ती प्रकारों को अलग करने की अनुमति देता है" - क्या आप विस्तृत कर सकते हैं? यह वास्तव में स्पष्ट समझ में नहीं आता है। – leftaroundabout
@ बाएंअराउंडबाउट 'gfoldl' में सभी 'सी एक्स' घटनाएं 'आर' हैं, यानी, वे सभी एक ही प्रकार के होते हैं। 'सी एक्स' के साथ, मैं अभी भी उन सभी का एक ही प्रकार हो सकता हूं, जैसे 'कॉन्स्ट आर एक्स' में जो 'आर'' के लिए आइसोमोर्फिक है। लेकिन मैं उन्हें सभी अलग-अलग भी कर सकता हूं, जैसे उदा। 'पहचान एक्स' में जो 'एक्स' के लिए isomorphic है। – kosmikus