2012-07-22 22 views
24

कम से कम 1 99 0 के उत्तरार्ध में वापस जाकर लोग restricted monads को एक दोस्ताना तरीके से हास्केल में एकीकरण के लिए इच्छुक हैं।प्रतिबंधित मोनैड की वर्तमान स्थिति क्या है?

उदाहरण के लिए, प्रतिबंधित मोनैड के बिना आप Set, Map या probability distributions से एक कुशल मोनड नहीं बना सकते हैं। यहां कुछ साल पहले एक SO question है जहां कोई और इस समस्या से दूर भाग गया।

  • हर संभव प्रतिबंध के लिए एक new type class बनाना:

    विभिन्न समाधान है कि लोगों को भी शामिल है, के साथ आए हैं कर रहे हैं।

  • Template Haskell का उपयोग करना।

  • Constraint Kinds का उपयोग करना।

हालांकि इनमें से कोई भी दृष्टिकोण "कैननिकल" प्रतीत नहीं होता है। मुझे 2007 में डॉन स्टीवर्ट से this blog post पर एक टिप्पणी मिली, जहां उन्होंने सूचित किया कि हम Indexed types के साथ प्रतिबंधित मोनैड रखने के लिए "काफी करीब" थे।

वर्तमान स्थिति क्या है? क्या अब प्रतिबंधित मोनैड करने का एक 'कैननिकल' तरीका है? या हम अभी भी कामकाज के साथ रह रहे हैं?

+12

मुझे लगता है कि यह बाध्यकारी प्रकारों के साथ लगता है जैसे यह हो जाता है, वे अभी तक के लिए सबसे अधिक _common_ समाधान होने के लिए थोड़ा सा नया हैं। – leftaroundabout

उत्तर

11

एंडर्स पर्सन, एमिल एक्सेलसन और जोसेफ स्वेनिंग्सन द्वारा हाल ही में एक पेपर है जो प्रतिबंधित मोनैड को एन्कोड करने का एक तरीका दिखाता है। मैं विवरण भूल गया हूं, लेकिन मुझे याद है कि यह एक अच्छा पेपर था।

पर्सन, ए; एक्सेलसन, ई। स्वेनिंग्ससन, जे। (2011)। Generic monadic constructs for embedded languages। आईएफएल 2011, कार्यान्वयन और कार्यात्मक भाषाओं के आवेदन पर 23 वां संगोष्ठी।

+1

धन्यवाद नॉर्मन। रुचि रखने वाले किसी भी व्यक्ति के लिए, आप पेपर की एक प्रति [जोसेफ स्वेनिंग्सन के होमपेज] (http://www.cse.chalmers.se/~josefs/) से प्राप्त कर सकते हैं। –

10

वास्तव में किसी भी प्रतिबंध के बिना नियमित मोनैड, के रूप में एक कुशल सेट मोनैड प्राप्त करना संभव है। दो अलग-अलग तरीकों से। निम्न आलेख दोनों बताते हैं:

http://okmij.org/ftp/Haskell/set-monad.html

लेख में यह भी बताते हैं कि प्रतिबंधित monads वास्तव में काफी प्रतिबंधित और कई monadic मुहावरों रोकता है। मुझे अनुमान है कि कार्यान्वयन विधियां सामान्य हैं और कोई प्रतिबंधित मोनड दक्षता खोने के बिना सामान्य में बदल सकता है। तो, यह प्रतीत हो सकता है कि हमें प्रतिबंधित मोनैड की आवश्यकता नहीं है।

+0

मैं वास्तव में एक कुशल संभाव्यता वितरण monad बनाने के लिए अपने कुशल सेट मोनैड के पीछे विचार का उपयोग कर चुका हूं (https://github.com/chris-taylor/hs-probability/blob/master/src/Control/Probability/Bayes.hs देखें) .. तो धन्यवाद! मैंने अन्य प्रतिबंधित मोनैड के लिए एक ही चीज़ करने के बारे में सोचा नहीं है, लेकिन मैं तुरंत एक कारण नहीं देख सकता कि यह क्यों काम नहीं करेगा। –

संबंधित मुद्दे