2012-05-17 10 views
6

में लिखित डेटा को बदलना Writer मोनैड एक्शन दिया गया है, मैं इसे मोनाड एक्शन के अंदर लिखित डेटा पर फ़ंक्शन मैप करके संशोधित करना चाहता हूं।राइटर मोनैड

कुछ की तरह:

retell :: (w -> w') -> Writer w a -> Writer w' a 

इस तरह के एक समारोह को पहले से ही पुस्तकालयों में मौजूद है? यदि नहीं, तो कैसे परिभाषित किया जा सकता है?

+0

आप यह कर सकते हैं 'pass' चेनिंग द्वारा MonadWriter कक्षा में विधि? यदि नहीं, तो मैं लेखक का अपना उप-वर्ग बनाउंगा - 'रिवाइटर' जो 'रीटेल' ऑपरेशन प्रदान करता है। –

+0

@stephentetley - खुद को सही करना, जैसा कि आप लिखना चाहते हैं लेखक राक्षस के 'डब्ल्यू' को बदलना आप इसे 'पास' के साथ नहीं कर सकते हैं। मैं 'रिवाइटर' सबक्लास के साथ जाऊंगा जो 'राइटर' के साथ 'राइटर 'बढ़ाता है। –

उत्तर

11
retell f = Writer . second f $ runWriter 

वहाँ भी पुस्तकालयों द्वारा प्रदान की एक mapWriter कार्य है। तो अगर आप ऐसा कर सकता है:

retell = mapWriter . second 

second समारोह Control.Arrow में है, लेकिन आप इस तरह यह अपने आप का एक कम सामान्य संस्करण को परिभाषित कर सकते हैं:

second f (a, b) = (a, f b) 
संबंधित मुद्दे