Como dijo James, no se puede. Su trampa hace que mis ojos sangren, y sugiero que hagas otra cosa ;-)
Recomiendo encarecidamente modificar los consumidores de bop si puedes. En lugar de ellos entregando una instancia de Bippy # Boppy, ellos entregar un par que comprende el valor del tipo dependiente y el valor que el tipo depende,
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 ...
}
Tenga en cuenta que esto es en parte una solución para la falta de tipos de métodos dependientes (habilitados en scalac agregando los tipos de método -Ydependent o -Xexperimental switches de línea de comando). Si los tuviéramos, entonces podríamos caer artefactos como DependentPack y volver a escribir lo anterior como,
val bip = new Bippy
val bop = bip.bop
foo(bip)(bop)
def foo(bippy : Bippy)(boppy : bippy.Boppy) = {
// use bippy ...
// use boppy ...
}
Ni que decir tiene, creo que tener tipos de métodos dependientes activadas por defecto sería muy deseable. Los usos no triviales de los tipos dependientes traen consigo un mundo de dolor en su ausencia a menos que sea muy cuidadoso.
Es la solución que estoy usando ya :) Pero como parece que no hay una mejor manera, se obtiene la marca verde, ojos sangrantes y todo! –