基于:
import shapeless._
case class Content(field: Int)
lens[Content] >> 'field
Run Code Online (Sandbox Code Playgroud)
我正在尝试制作镜头创建方法,其中包括:
def makeLens[T <: Product](s: Symbol) = lens[T] >> s
Run Code Online (Sandbox Code Playgroud)
但这似乎并不明显.有可能吗?
如果没有,我想要实现的最终结果是使用案例类内容更新嵌套映射的通用方法,例如:
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)
Run Code Online (Sandbox Code Playgroud)
当用T和f参数化时,我无法使它工作.还有其他惯用的无样板解决方案吗?
谢谢!
假设我们有一个类型T[A,B],我们可以表达以下类型约束,让我们调用它HT:
满足的每一种类型都HT必须是形式的T[P1, P2] :: T[P2, P3] :: T[P3, P4] :: ... :: T[PN-1, PN] :: HNil
对于一些type x = P1 :: P2 :: ... :: PN :: HNil.
我试图在类型化的顺序处理管道上找到一个抽象.