Через магнолию, как упомянул симеон, всё равно бойлерплейтно, если делать тупекласс с параметром, его дериватор нужно будет отдельной строкой в стабильное имя записывать. Т.е. что-то вроде
val lensAdress = new LensDerive[Address] lensAdress [UserInfo].set(...)(...)
зачем отдельной строкой? anyLend[A, B].set(...) работает