> a lens with the name 'cans' will be created.

Does Template Haskell modify code file or can these '_' names be used throughout the code without visible definition?

Thank you for this very detailed and specific example.

Could we say that lens is a bit like extension to record syntax: allow to traverse, get and set properties for structures that areĀ  more complex than simple 1 level record?

Why do lens require Template Haskell? Only to generate '_' functions?