On Mon, Dec 21, 2015 at 09:06:55PM +0100, Imants Cekusins wrote:
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?
In this case Template Haskell doesn't modify the code, fields like '_cans' are just normal fields and can be used with this name. There's only the convention that 'makeLenses' creates for every field with a '_' prefix a lens. In the case of '_cans' a lens like this will be created: cans :: Lens' Parcel [Can] cans = lens getCans setCans where getCans parcel = _cans parcel setCans parcel cans = parcel { _cans = cans } (This is just an idealized implementation and the real one will be most likely a bit more sophisticated and optimized.)
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?
It's often compared with some kind of jQuery for data structures.
Why do lens require Template Haskell? Only to generate '_' functions?
To automatically generate the Haskell code like the lens 'cans' in the above example. Greetings, Daniel