The previous implementation of lenses with objects works well, but we want to look at a different way of doing things that will let us work with more advanced functional ideas. This will involve some concepts we'll be analyzing in more detail in Chapter 12, Building Better Containers – Functional Data Types, but here, we'll use just what we need so that you don't have to go and read that chapter now! Our lenses will work in the same way that the preceding ones did, except that since they will be functions, we'll be able to compose them with no special composing code.
What's the key concept here? A lens will be a function, based on a getter and a setter pair, that will construct a container (actually an object, ...