Бесформенный: общий объектив, параметризованный по классу дела или полю
На основании:
import shapeless._
case class Content(field: Int)
lens[Content] >> 'field
Я пытаюсь сделать метод создания линз, что-то вроде:
def makeLens[T <: Product](s: Symbol) = lens[T] >> s
Но это кажется неочевидным. Возможно ли это сделать?
Если нет, то конечный результат, которого я пытаюсь достичь, - это общий метод обновления вложенных Карт с содержимым класса дел, например:
import scalaz._
import Scalaz._
import PLens._
import shapeless._
import shapeless.contrib.scalaz._
def nestedMapLens[R, T <: Product](outerKey: String, innerKey: Int, f: Symbol) =
~((lens[T] >> f).asScalaz) compose mapVPLens(innerKey) compose mapVPLens(outerKey)
Я не могу заставить его работать при параметризации T и f. Существуют ли другие идиоматические решения без шаблонов?
Спасибо!