So much has been written about lens and other optics in Haskell that these ideas are likely not very original. However, I'll try.
Let's say we have some recursive data type:
type Record = Map String Value
data Value = I Int | R Record
deriving (Generic, Show)