softwaremill / quicklens Scala 852 53 Modify deeply nested case class fields scala lenses functional-programming