Jak powiedział James, nie można. Jego cheat sprawia, że moje oczy krwawią, a proponuję zrobić coś innego ;-)
Gorąco polecam modyfikację konsumentów bop, jeśli możesz. Zamiast przekazania ich wystąpienie Bippy # Boppy, przekazać im para zawiera wartość typu zależnego i wartość rodzaj zależy,
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 ...
}
Należy zauważyć, że jest to częściowo obejście braku zależne typy metod (włączone w skalaku poprzez dodanie opcji -yzwiązanych z typem-metod lub -Xexperymentalnych przełączników wiersza poleceń). Gdybyśmy mieli je, a następnie mogliśmy spaść artefaktów jak DependentPack i przepisać powyższe jak
val bip = new Bippy
val bop = bip.bop
foo(bip)(bop)
def foo(bippy : Bippy)(boppy : bippy.Boppy) = {
// use bippy ...
// use boppy ...
}
Trzeba powiedzieć, myślę, mający na utrzymaniu rodzaje metod włączone domyślnie byłoby wysoce pożądane. Nietynkowe zastosowania typów zależnych niesie ze sobą świat bólu pod ich nieobecność, chyba że jesteś bardzo ostrożny.
Jest to rozwiązanie, którego używam już :) Ale jak się wydaje nie ma lepszego sposobu, dostajesz zielony tyk, krwawiące oczy i wszystko! –