2013-05-14 3 views
9

हर Monad के बाद से अनुक्रमण संचालन पर एक Monoid है। हास्केल में Monoid क्यों वारिस नहीं Monad करता है?प्रत्येक मोनोड monoid है?

+0

वास्तव में क्या आप 'अनुक्रमण आपरेशन' यहाँ से मतलब है? –

+2

@Rhymoid: मुझे पूरा यकीन है कि यह '>>' है। –

+0

@ टिखोन जेल्विस: '>>' का एक सीमित रूप, सही? –

उत्तर

12

यह एक Monad होने की जरूरत नहीं है यहां तक ​​कि, इस हर Applicative के लिए काम करता है। तो हाँ, आप निर्धारित कर सकते हैं:

class (Functor f, Monoid (f())) => Applicative f where 

लेकिन यह मतलब है कि आप Monoid उदाहरण हर बार जब आप एक Applicative उदाहरण बारे में प्रदान करने के लिए होगा। यह काफी परेशान हो सकता है, निश्चित रूप से यह Monoid उदाहरण अक्सर उपयोग नहीं किया जाएगा।

f() के आसपास एक नया टाइप रैपर बनाने का एक बेहतर समाधान है, और फिर आप एक बार और सभी के लिए सभी आवेदक फ़ैक्टरों के लिए Monoid उदाहरण प्रदान कर सकते हैं। the reducers package में एक आसानी से उपलब्ध है।

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