मैं point
और bind
कार्यान्वयन के माध्यम से एक Monad
निराकार HList
के लिए (scalaz) को परिभाषित करने की कोशिश की है के लिए scalaz इकाई उदाहरण परिभाषित करें। पहली समस्या यह है कि HList
विशेषता एक प्रकार का कन्स्ट्रक्टर नहीं है, लेकिन इसे प्रकार lambdas के साथ हल किया जा सकता है, point
सरल है, लेकिन मुझे bind
के लिए सही कार्यान्वयन नहीं मिला, मुझे लगता है कि मुझे चाल के साथ Poly1
के कुछ फ़ंक्शन की आवश्यकता है , लेकिन आकारहीन का वह पक्ष अभी भी मेरे लिए अंधेरा है। HList
में सभी कार्यों को सरल सूची की तरह एक मोनाड होना है, तो क्या स्कालज़ से इसे कार्यान्वित करना संभव है?एक निराकार hlist
उत्तर
एक मोनॉयड कुछ संचालनों के साथ एक सेट है जो विशेष कानूनों का पालन करता है। HListM[A]
जितना संभव हो उतना तत्व आप विचार कर रहे हैं? आप HListM[A] = HList
घोषित यदि किसी भी HList
यानी, है, तो आप जल्दी से मिल जाएगा कि आप कर सकते हैं f: A => B
साथ नहीं map
, identity
के रूप में सभी map
रों इलाज के अलावा और आप बल्कि नीरस इकाई Id
(कुछ अतिरिक्त लेकिन निष्क्रिय निवासियों के साथ में नयापन लाया गया है)।
हम प्रकार HListM[A] = A :: ... :: A :: HNil
के साथ एक इकाई बना सकता है (हालांकि यहां तक कि वास्तव में स्काला में उस प्रकार व्यक्त एक चुनौती है - आप एक सहायक विशेषता trait CopiesOf[N <: Nat, A] {type Out <: HList
}, आवश्यकता होगी इस के उदाहरण प्रदान करने के लिए implicit
रों, और फिर एक अस्तित्व को वास्तव में इसे लिखें (CopiesOf[N, A]#Out forSome {type N <: Nat}
))। इसके लिए मोनैड ऑपरेशंस लिखना संभव है, हालांकि आपको ऑपरेशन के बिंदु पर Prepend
जैसे बेकार सहायक वर्गों की आवश्यकता होगी, क्योंकि स्कैला में "फोरल" प्रकार व्यक्त करने का कोई वास्तविक तरीका नहीं है - आप _0
के लिए अपने प्रकार के उदाहरण घोषित कर सकते हैं और Succ[N]
, लेकिन कंपाइलर को साबित करने का कोई तरीका नहीं है कि N <: Nat
के लिए कोई उदाहरण है, आपको केवल इन्हें उपयोग करने की आवश्यकता होने पर अंतर्निहित लोगों की आवश्यकता होती है।
लेकिन बहुत सारे काम के बाद आप List[A]
पर कुछ आइसोमोर्फिक के साथ समाप्त हो जाएंगे; उस मामले के लिए क्यों न केवल List[A]
का उपयोग करें?
- 1. निराकार HList प्रकार
- 2. निराकार: filterNot के उलट एक HList
- 3. निराकार:
- 4. HList
- 5. अधिक निराकार
- 6. कैसे सबूत है कि निराकार HList में प्रत्येक प्रकार के तत्व एक typeclass
- 7. निराकार: विकल्प
- 8. स्काला निराकार कोड 2
- 9. समझौता `निराकार
- 10. HList डाली varargs को
- 11. हास्केल: सभी तत्वों को एक Hlist
- 12. निराकार आधार विशेषता
- 13. निराकार परिवर्तित मामले वर्ग और सभी विकल्प क्षेत्रों
- 14. निराकार बहुरूपी कार्यों कि निर्भरता
- 15. कैसे उपयोग कर एक स्केला सूची splitAt को निराकार
- 16. मुद्दे के समाधान arity सूची प्रसंस्करण ड्राइव करने के लिए, निराकार
- 17. एक वस्तु के बजाय ap Nat में बेकार वर्ग क्यों है?
- 18. मानचित्र [स्ट्रिंग, वस्तु] एक डीबी (या कुंजी मान स्टोर) से एक निराकार एक्सटेंसिबल रिकार्ड
- 19. नक्शा बेकार hlist प्रकार एफ [टी 1] :: ... :: एफ [टीएन] :: एचएनआईएल प्रकार टी 1 :: ... :: टीएन :: एचएनआईएल (प्रकार स्तर अनुक्रम)
- 20. निराकार - एक मामले वर्ग दूसरे में क्षेत्रों के साथ अलग आदेश
- 21. एक एचएलिस्ट
- 22. एक एचएलिस्ट को विभाजित करना जिसे प्रीपेन्ड [ए, बी]
- 23. Argonaut या Circe
- 24. दयालु सूचियां कैसे काम करती हैं?
- 25. स्केल उच्च प्रकार के प्रकार निहित डीफ़ में विफल रहता है "अंतर्निहित मूल्य नहीं मिला"
- 26. एक्सट्रैक्टर कि नकल करता पार्सर संयोजन
- 27. यूनरी प्रकार के कन्स्ट्रक्टर के साथ आंतरिक प्रकार के बेकार रिकॉर्ड मान का अनुमान कैसे लगाया जाए?
- 28. स्वचालित रूप से एक केस क्लास को आकारहीन में एक एक्स्टेंसिबल रिकॉर्ड में रूपांतरित करें?
- 29. सपाट एक मोहरबंद मामले वर्ग पदानुक्रम
- 30. पैटर्न पर मिलान प्रचारित प्रकार
यह सीधा अर्थ में संभव नहीं है, लेकिन यह एक दिलचस्प सवाल है। उदाहरण के लिए देखें [मेरा जवाब यहां] (http://stackoverflow.com/a/14456938/334519) (मोनैड्स के बजाय आवेदक फ़ैक्टर को शामिल करना), [यह संबंधित उदाहरण] (https://github.com/milessabin/shapeless/ दोषहीन/मास्टर/उदाहरण/src/main/scala/shapeless/example/cartesianproduct.scala) बेकार में, और मेरा (अनुत्तरित) प्रश्न [यहां] (https://twitter.com/travisbrown/status/294064540235210752)। –
स्कैलाज़ अभी भी मेरे लिए अनचाहे क्षेत्र है, लेकिन इसमें आपके लिए आवश्यक विधियों और अंतःक्रियाशीलता हो सकती है: [बेकार कंट्रीब] (https://github.com/typelevel/shapeless-contrib) – EECOLOR
मंडुबियन (http://stackoverflow.com/ उपयोगकर्ता/601296/मंडुबियन) ने एचएलिस्ट के लिए एक मोनोइड के बारे में एक ब्लॉग पोस्ट लिखा: http://mandubian.com/2014/07/29/hmonoid/, जो आपके लिए ब्याज का हो सकता है। – al3xar