Shapeless 2.1中`MkNthFieldLens`和`>>(n:Nat)`之间的不一致

时间:2015-03-07 07:15:37

标签: scala shapeless

假设,我想使用无形镜头修改元组的第一个元素。

见证:

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版本)?

0 个答案:

没有答案