मुझे पता चला कि कुछ कंटेनरों के पास एक बहुत ही समान फ़ंक्शन सेट है। उदाहरण के लिए सूची, सेट, अनुक्रम, पाठ और बाइटस्टरीज़। मुझे आश्चर्य है कि वे एक या अधिक सामान्य टाइपक्लास का उपयोग क्यों नहीं करते हैं।कंटेनर-प्रकारों के लिए कोई टाइपक्लास क्यों नहीं है?
उत्तर
वास्तव में, प्रश्न Making a single function work on lists, ByteStrings and Texts (and perhaps other similar representations) देखें, जो आपके लगभग एक डुप्लिकेट है।
एक अलग पैकेज में होने का मुख्य कारण शायद यह है कि इसे भाषा विस्तार की आवश्यकता है - या तो कार्यात्मक निर्भरताएं या परिवारों को टाइप करें। हमें किसी भी तरह कहना है कि Text
में केवल Char
एस, ByteString
हो सकता है केवल Word8
एस, []
में कोई भी प्रकार हो सकता है, और Set
में केवल Ord
के उदाहरण हो सकते हैं। सूची की तरह
उनके पास क्या सामान्य कार्य सेट है? AFAICS, केवल एक ही कंटेनर को एक में जोड़ने और खाली कंटेनर उत्पन्न करने की क्षमता। और देखो, वास्तव में वे सभी Monoid
हैं, जो वास्तव में उस इंटरफेस की पेशकश करता है!
आप इनमें से सभी के साथ वास्तव में कुछ भी नहीं कर सकते हैं क्योंकि कुछ पॉलिमॉर्फिक हैं, कुछ मोनोमोर्फिक हैं।
बहुरूपी कंटेनर, Sequence, Maybe और MapFunctor, Foldable और Traversable typeclasses के उदाहरण हैं।
Set के लिए आप केवल Foldable है, के रूप में Ord उदाहरण यह असंभव दूसरों को परिभाषित करने के लिए बनाता है (आप fmap
(Data.Set.map परिभाषित कर सकते हैं), जो functor कानूनों का पालन करना होगा, लेकिन यह हस्ताक्षर तर्क पर Ord उदाहरणों की आवश्यकता होगी है)।
जैसा कि पहले बताया गया है, टेक्स्ट और बाइटस्ट्रिंग परिभाषित समान प्रकार के वर्गों के उदाहरण हो सकते हैं, लेकिन आपको या तो कार्यात्मक निर्भरताओं या परिवारों को टाइप करने की आवश्यकता होगी।
[सेट _is_ monoid] (http://hackage.haskell.org/packages/archive/containers/0.5.2.1/doc/html/src/Data-Set-Base.html#line-231): उस कक्षा के बाद से उदाहरण के सिर में कोई बहुलक कार्य/निहित प्रकार तय नहीं होता है, यह वहां एक मोनोमोर्फिक कंटेनर के रूप में व्यवहार करता है। - संयोग से, यहां तक कि एक चालाक तरीका भी है जिसमें आप इसे [फ़ैक्टर/आवेदक/मोनाड] बना सकते हैं (http://copilotco.com/mail-archives/haskell-cafe.2007/msg00051.html), साथ ही; जिसके लिए एक GADT में 'Ord' उदाहरण बाध्यकारी की आवश्यकता होती है। – leftaroundabout
सच, अच्छा बिंदु। – phadej
सेट और फ़ंक्शन के बारे में अधिक जानकारी: http://dorchard.wordpress.com/2011/10/18/subcategories-in-haskell-exofunctors/ – phadej
- 1. हास्केल में कोई 'कोफंक्टर' टाइपक्लास क्यों नहीं है?
- 2. सिर्फ पैटर्न मिलान के बजाय टाइपक्लास क्यों?
- 3. क्या डेटा के लिए शो टाइपक्लास के बराबर है। टेक्स्ट?
- 4. इस मानचित्र के लिए "कोई फ़ंक्शन नहीं है" क्यों है?
- 5. हास्केल उप-टाइपक्लास के लिए अनिश्चितता की आवश्यकता है?
- 6. कोई विदेशीऑटोडेलेट क्यों नहीं है?
- 7. स्ट्रिंग के लिए कोई आदिम प्रकार क्यों नहीं है?
- 8. std :: सूची के लिए कोई ऑपरेटर [] क्यों नहीं है?
- 9. ब्रॉडकास्ट रिसीवर के लिए कोई टेस्ट इंस्ट्रूमेंटेशन क्यों नहीं है?
- 10. गणित कार्यों के लिए कोई स्थिर पुस्तकालय क्यों नहीं है?
- 11. ExceptT के लिए कोई MonadMask उदाहरण क्यों नहीं है?
- 12. वर्दी चर के लिए समकक्ष कोई glbindAttribLocation() क्यों नहीं है?
- 13. लैम्बडा के लिए कोई फंक्शन-ट्राई-ब्लॉक क्यों नहीं है?
- 14. std :: string के लिए कोई रिजर्व कन्स्ट्रक्टर क्यों नहीं है?
- 15. फ़ंक्शंस के लिए कोई शो उदाहरण क्यों नहीं है?
- 16. डेटटाइम के लिए कोई अंतर्निहित प्रकार क्यों नहीं है?
- 17. Data.String.IsString टाइपक्लास केवल एक रूपांतरण को परिभाषित क्यों करता है?
- 18. हास्केल टाइपक्लास
- 19. कोई वर्दी_डिस्ट्रिब्यूशन क्यों नहीं है?
- 20. ईक टाइपक्लास
- 21. जेनिक्स के साथ स्कैला टाइपक्लास
- 22. सामान्य लिस्प में टाइपक्लास
- 23. टाइपक्लास और जीएडीटी
- 24. हास्केल टाइपक्लास निरीक्षण
- 25. टाइपक्लास के उदाहरणों के रूप में कार्य?
- 26. क्यों स्कैला में कोई नक्शा नहीं है?
- 27. कोई std :: stou क्यों नहीं है?
- 28. स्कालज़ बाइंड [सेक] टाइपक्लास
- 29. सी # में कोई रिवर्सएन्यूमेरेटर क्यों नहीं है?
- 30. क्यों स्कैला में कोई गिरावट नहीं है?
असल में वे करते हैं। लेकिन "सामान्य टाइपक्लास" की सूची आम तौर पर 'मोनॉयड ',' फंक्टर 'और कभी-कभी' लिस्टलाइक 'तक ही सीमित होती है। मुझे लगता है कि ऐसा इसलिए है क्योंकि अन्य वर्ग मौजूद नहीं हैं या पर्याप्त आम नहीं हैं। – Yuras
वैसे, लाइब्रेरी के लिए 'लेंस' पैकेज को देखें, जिसने उन सभी पर सारण करने का तरीका खोज लिया है। लेकिन यह नए टाइपक्लास के साथ ऐसा नहीं करता है, जिस तरह से आप सोच सकते हैं .. – Carl
@ युरास - कंटेनरों को ट्रैवर्सबल और फोल्डबल का समर्थन करना चाहिए (या ऐसा करने का कोई अच्छा कारण नहीं है)। –