You can't* turn (!!)
into any lens-like thing other than a Getter
-- but there's a function to do this sort of thing: ix, for accessing things at indices. It's actually a Traversal
, not a Lens
-- which, here, just means that it can fail (if the index is out of bounds) -- but as long as the index is in the list, it'll work.
There's another problem, though -- (^.)
is also an operator that's used exclusively for getting values. It's incompatible with e.g. (%=)
, which takes a lens-like thing as its first argument. And: (%=)
is for mapping a function over the existing value; if you just want to set, you can use (.=)
. So you probably want something like:
list . ix i . inner .= True
* There actually is a function that can do this -- it's called upon
-- but it uses wonderful evil black magic and you shouldn't use it, at least not for this (and probably not for any real code).