की आवश्यकता है निम्नलिखित कोड संकलन नहीं करता है:अनुक्रमण सूची monoid बाधा
{-# LANGUAGE TemplateHaskell #-}
import Control.Lens
data MyType = MyType Int
data Outer = Outer { _inners :: [ Inner ] }
data Inner = Inner { _val :: MyType }
$(makeLenses ''Outer)
$(makeLenses ''Inner)
i1 = Inner (MyType 1)
i2 = Inner (MyType 2)
o = Outer [i1, i2]
x = o ^. inners . ix 0 . val
इस त्रुटि
Toy.hs:17:23:
No instance for (Data.Monoid.Monoid MyType)
arising from a use of `ix'
Possible fix:
add an instance declaration for (Data.Monoid.Monoid MyType)
In the first argument of `(.)', namely `ix 0'
In the second argument of `(.)', namely `ix 0 . val'
In the second argument of `(^.)', namely `inners . ix 0 . val'
यह सोचते हैं कि यह मतलब नहीं है MyType एक होने के लिए दे रही है मोनॉयड, मैं लेंस कैसे प्राप्त कर सकता हूं (या ट्रैवर्सल, या जो भी सबसे उपयुक्त है - मुझे भेदों के बारे में निश्चित नहीं है) जो मुझे इस नेस्टेड फ़ील्ड तक पहुंचने की अनुमति देता है? अधिमानतः दोनों को पढ़ने और अपडेट करने की क्षमता के साथ।
[यह सवाल] (http://stackoverflow.com/q/13434568/712548) (और मेरा उत्तर) यहां भी प्रासंगिक हो सकता है। – shachaf