मान लीजिए कि मैं सभी संख्याओं को Monoid
का उदाहरण बनाना चाहता हूं। इस प्रकार की प्रत्येक Num
के लिए एक उदाहरण बनाने के लिए होने का:क्या आप कक्षा के उदाहरण को किसी प्रकार के लिए नहीं बल्कि हास्केल में पूरी कक्षा के लिए कर सकते हैं?
instance Monoid Int where
mappend = (+)
mempty = 0
instance Monoid Float where
mappend = (+)
mempty = 0.0
-- etc
वहाँ कुछ इस तरह है?
instance Num t => Monoid t where
mappend = (+)
mempty = 0
संपादित
कुछ GHC एक्सटेंशन के साथ जवाब देने और संभावित मुद्दों के बारे में चेतावनी कर रहे हैं; मैंने पाया कि सूचनात्मक, लेकिन मुझे लगता है कि मैं Sum
, Product
और जो भी coerce
करता है, के साथ रहूंगा।
जो आप खोज रहे हैं वह पहले से ही है - लेकिन संख्याओं के लिए एक से अधिक संभव मोनोइड्स हैं - यही कारण है कि यह 'Sum' और' product' ([डेटा देखें। मॉनिइड] (https: //hackage.haskell) के लिए है .org/package/base-4.8.1.0/दस्तावेज़/डेटा-मोनॉयड.html # टी: मोनॉयड)) – Carsten
@ करस्टेन तो अब मुझे 'Sum' के बारे में पता है, मैं यह कर सकता हूं:' mconcat ([1,2] :: Sum Int) ', जो अच्छा है, लेकिन मैं 'mconcat ([1,2] :: Sum Float) नहीं कर सकता, न ही' mconcat ([1,2] :: Sum frractional)'। 'फ्लोट' और 'डबल' के लिए 'Sum' का उपयोग करने का उचित तरीका क्या है? –
मुझे कोई संकेत नहीं है कि आपको काम करने वाले पहले व्यक्ति को कैसे मिला - लेकिन 'मोनकैट ([1,2] :: [Sum Float])' मेरे लिए ठीक काम करता है;) – Carsten