3
我想在編制forgetBA
後再編譯下面的代碼。在Scala中解析模糊隱式分辨率
trait ImplicitExample {
trait AA[T]
trait AB[T] extends AA[T]
trait BA[T] extends AA[T]
trait BB[T] extends AB[T] with BA[T]
object AA {
implicit def forgetAB[T: AB]: AA[T] = implicitly[AA[T]]
/*implicit*/ def forgetBA[T: BA]: AA[T] = implicitly[AA[T]]
}
object AB {
implicit def forgetBB[T: BB]: AB[T] = implicitly[AB[T]]
}
object BA {
implicit def forgetBB[T: BB]: BA[T] = implicitly[BA[T]]
}
object BB {
implicit object BBInt extends BB[Int]
}
val AAInt = implicitly[AA[Int]]
}
我明白,這將導致一個模糊的隱式解析的問題,所以我在尋找一種方式來表示對在另外一個隱含的分辨率的偏好。
我聽說過以某種方式插入中間特徵的謠言可能會有幫助,但我似乎無法找到解釋。
我的'真實世界'的例子是EuclideanRing,OrderedEuclideanRing,Field和OrderedField。 –