不从val调用时,无法找到类方法隐式参数

时间:2014-02-26 11:39:45

标签: scala shapeless implicits

我有一个依赖于HList的类,具有多态函数和在列表上映射此函数的方法。奇怪的是,这个方法只能在val上调用,否则编译失败:

import shapeless._
import shapeless.ops.hlist.Mapper

class C[L <: HList](l: L) {
    object f extends Poly1 {
        implicit def whatever[T] = at[T]{_ => ()}
    }
    def g(implicit m: Mapper[f.type,L]) = ()
}
val c = new C(1 :: "s" :: HNil)

// this line compiles:
val v1 = c.g

// compilation fails if c is inlined:
val v2 = (new C(1 :: "s" :: HNil)).g
// error: could not find implicit value for parameter m:
//   Mapper[_1.f.type, Int :: String :: HNil]]]

在将f保留在C内的同时,是否有办法克服此类行为?我试图将方法g提取到另一个类或对象,但它没有帮助。

0 个答案:

没有答案