带隐式类型的成员

Type Member w/ Implicit

鉴于:

// type-class
trait Eq[A]

class MyInt 
object MyInt {
  implicit val myIntEq = new Eq[MyInt] {}
}

sealed trait Something {
  type A 
  implicit val x: Eq[A]
}

case object SomethingImpl extends Something {
  override type A = MyInt
  override implicit val x = MyInt.myIntEq
}

然后,我使用类型成员的 implicit via:

scala> def f(s: Something): Eq[s.A] = {
     |   implicit val x: Eq[s.A] = s.x
     |   x
     | }
f: (s: Something)Eq[s.A]

然而,我的直觉告诉我,必须通过 implicit val ... 将隐式纳入范围有点笨拙。

也许我应该在 Something 的伴随对象中定义 f 函数?

定义此 f 函数的标准方法是什么?

如果你想将某个隐式带入范围,你通常 import 它。

def f(s: Something) = {
  import s.x
  ???
}