通过抽象类型成员查找隐式值

时间:2014-08-20 20:42:44

标签: scala implicits abstract-type

对于类似trait A[T]的类型,在范围内查找隐式只是implicitly[A[SomeType]]

是否可以这样做,如果是这样的话,如何用一个抽象类型成员替换type-parameter,如trait A { type T }

2 个答案:

答案 0 :(得分:2)

你可以做到

implicitly[A { type T = Int }

但是你可能会失去精确度:

scala> trait Foo { type T ; val t: T }
defined trait Foo

scala> implicit val intFoo: Foo { type T = Int } = new Foo { type T = Int ; val t = 23 }
intFoo: Foo{type T = Int} = $anon$1@6067b682

scala> implicitly[Foo].t // implicitly loses precision
res0: Foo#T = 23

要解决此问题,您可以使用shapeless库中的the newly introduced the method(我已从上面的示例中提取)

scala> the[Foo].t // the retains it
res1: Int = 23

scala> the[Foo].t+13
res2: Int = 36

答案 1 :(得分:1)

我刚刚意识到这可以通过implicitly[A { type T = SomeType }]

完成