Append after index and update items after inserted item with lens

Hello, I'm trying to insert a new elemnt into a list after a given index and increment the orderId accordingly with the lens library. I'm a bit confused at why this code isn't working: ``` import Control.Lens data A = A { _customOrderId :: Int } deriving Show things = [ A {_customOrderId = 0} , A {_customOrderId = 1} , A {_customOrderId = 2} , A {_customOrderId = 3} ] main = print $ things & ( (_drop 2 %~ ((A 22)<|)) . ((traversed . indices (> 2) . customerOrderIdLens) %~ (+ 1)) ) ``` The first portion works to insert where desired, but the second portion `((traversed . indices (> 2) . customerOrderIdLens) %~ (+ 1))` only increments the order id in indices 4. Any idea why this is happening? Thanks, Cody Goodman

The only item of index satisfying (> 2) in the list things is (A 3). Li-yao On 03/13/2018 02:44 AM, Cody Goodman wrote:
Hello,
I'm trying to insert a new elemnt into a list after a given index and increment the orderId accordingly with the lens library.
I'm a bit confused at why this code isn't working:
``` import Control.Lens
data A = A { _customOrderId :: Int } deriving Show
things = [ A {_customOrderId = 0} , A {_customOrderId = 1} , A {_customOrderId = 2} , A {_customOrderId = 3} ]
main = print $ things & ( (_drop 2 %~ ((A 22)<|)) . ((traversed . indices (> 2) . customerOrderIdLens) %~ (+ 1)) ) ``` The first portion works to insert where desired, but the second portion `((traversed . indices (> 2) . customerOrderIdLens) %~ (+ 1))` only increments the order id in indices 4.
Any idea why this is happening?
Thanks,
Cody Goodman
_______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.

Hi Li-Yao,
I made a mistake with my example. In my real world problem there are many
elements after which need updated.
On Mar 13, 2018 5:50 AM, "Li-yao Xia"
The only item of index satisfying (> 2) in the list things is (A 3).
Li-yao
On 03/13/2018 02:44 AM, Cody Goodman wrote:
Hello,
I'm trying to insert a new elemnt into a list after a given index and increment the orderId accordingly with the lens library.
I'm a bit confused at why this code isn't working:
``` import Control.Lens
data A = A { _customOrderId :: Int } deriving Show
things = [ A {_customOrderId = 0} , A {_customOrderId = 1} , A {_customOrderId = 2} , A {_customOrderId = 3} ]
main = print $ things & ( (_drop 2 %~ ((A 22)<|)) . ((traversed . indices (> 2) . customerOrderIdLens) %~ (+ 1)) ) ``` The first portion works to insert where desired, but the second portion `((traversed . indices (> 2) . customerOrderIdLens) %~ (+ 1))` only increments the order id in indices 4.
Any idea why this is happening?
Thanks,
Cody Goodman
_______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.
_______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.
participants (2)
-
Cody Goodman
-
Li-yao Xia