Lenses rather remind me of setf (generalised setters in lisp) but for immutable data types. Nifty.