Hi Alex. We do use lens libraries internally, and these are proven to work; however, you do need to write some boilerplate as we don’t support template haskell, as you pointed out.
We’re somewhat divided in this approach as it poses some performance challenges. I think there is a blog post somewhere by @Martin_Huschenbett that discusses this in more detail. Here:
Maybe he can comment further on the (performance conscious) way of doing field updates!