
Hi Elise,
thanks for your answer. That looks like something that might work - however, having never worked with Optics, I'm not entirely sure whether I'm doing it right, getting an error:
oh sorry, there has to be a 'traversed' before the 'filtered'.
Also, may I ask what the '&' is in your proposed solution?
The '&' is just applying a lens to a variable. So here's a working example: {-# LANGUAGE Rank2Types #-} import Control.Lens type Background = Int type Lifeform = Int type Player = Int data World = World Background [Lifeform] deriving (Show) lifeforms :: Lens' World [Lifeform] lifeforms = lens getLifeforms setLifeforms where getLifeforms (World _ lifeforms) = lifeforms setLifeforms (World bg _) lifeforms = World bg lifeforms colliding :: Player -> Traversal' [Lifeform] Lifeform colliding player = traversed . filtered (== player) If you load this into ghci und can write:
World 1 [1, 2] & lifeforms . colliding 1 %~ (+ 10) World 1 [11,2]
Greetings, Daniel