假设,我想使用无形镜头修改元组的第一个元素。
见证:
import shapeless._
def modifyKey[A,B](t: (A, B))(f: A => A)(implicit mk: MkNthFieldLens[(A,B), _1]) =
(lens[(A, B)] >> '_1).modify(t)(f)
与Nat:
import nat._
def modifyKey[A,B](t: (A, B))(f: A => A) = (lens[(A, B)] >> _0).modify(t)(f)
所以我必须在这里使用>> _0
而不是>> _1
,否则它会尝试B
:
scala> def modifyKey[A,B](t: (A, B))(f: A => A) = (lens[(A, B)] >> _1).modify(t)(f)
<console>:13: error: type mismatch;
found : A => A
required: B => B
def modifyKey[A,B](t: (A, B))(f: A => A) = (lens[(A, B)] >> _1).modify(t)(f)
^
是这样的&#34; 0 vs 1&#34;计算是故意的,还是我的Shapeless有问题(我使用scala 2.11.5的2.1版本)?