无形镜片的想法

时间:2014-05-26 17:19:58

标签: scala intellij-idea shapeless

我尝试使用版本2.0.0的shapless镜头用于scala 2.10.3 我的代码与此类似:

import shapeless._
case class A(map: Map[String, String])
case class B(a: A)
val mapLens = lens[B] >> 'a >> 'map 

mapLens的概念中的感染类型是

AnyRef with Lens[B, Nothing] {val gen: LabelledGeneric.Aux[Nothing, ::[record.FieldType[Witness.Lt[Symbol]#T, Nothing], Nothing]]}

所以如果我想改变B实例的值

mapLens.set(b)(b.a.map + ("foo" -> "bar"))

我遇到类型不匹配错误。如何解决这个问题?

P.S。 Here有一个使用无定形镜片的例子。这个lens[Person].address.street如何运作?我的意思是编译器如何允许我们在lense类的实例上调用case类的方法?因为在LenseExamples对象中>>使用运算符

修改 尝试过REPL并且有效。 Idea说它

could not find implicit value for evidence parameter of type shapeless.LabelledGeneric[B]{type Repr = Out0}

同样的抱怨发出了gradle

1 个答案:

答案 0 :(得分:5)

想法是错误的。您应该报告针对Scala插件的错误。