Как сказал Джеймс, ты не можешь. Его чит заставляет мои глаза кровоточить, и я предлагаю вместо этого сделать что-то еще; -)
Я настоятельно рекомендую модифицировать потребителей bop, если вы можете. Вместо того, чтобы передавать им экземпляр Bippy # Boppy, передайте им пару, содержащую значение зависимого типа и значение, от которого зависит тип,
trait DependentPack {
val bippy : Bippy
val boppy : bippy.Boppy
}
val bip = new Bippy
val bop = bip.bop
val dep = new DependentPack { val bippy = bip ; val boppy = bop }
foo(dep)
def foo(dp : DependentPack) = {
import dp._
// use bippy ...
// use boppy ...
}
Обратите внимание, что это частично обходной путь из-за отсутствия зависимых типов методов (включается в scalac путем добавления ключей командной строки -Ydependent-method-types или -Xexperimental). Если бы они были у нас, то мы могли бы отбросить артефакты, такие как DependentPack, и переписать вышеприведенное как:
val bip = new Bippy
val bop = bip.bop
foo(bip)(bop)
def foo(bippy : Bippy)(boppy : bippy.Boppy) = {
// use bippy ...
// use boppy ...
}
Само собой разумеется, я думаю, что наличие зависимых типов методов, включенных по умолчанию, было бы очень желательно. Нетривиальное использование зависимых типов приносит им боль в их отсутствие, если вы не очень осторожны.