Ich habe einen F-begrenzt Typen Sys
:Existentielle Typ oder Typ gebunden Parameterfehler
trait Sys[S <: Sys[S]]
und einige Eigenschaft, die es als Typ-Parameter übernehmen:
trait Foo[S <: Sys[S]]
Angenommen, ich habe eine Methode zu sein, aufgerufen mit einem Foo
:
def invoke[S <: Sys[S]](foo: Foo[S]) =()
nehme ich ein Modell Update-Typ haben, ein da Untertypen, die trägt ein Foo
:
sealed trait Update
case class Opened[S <: Sys[S]](foo: Foo[S]) extends Update
eine Hilfsfunktion ein Modell Beobachter registrieren:
def observe(pf: PartialFunction[Update, Unit]) =()
nun folgende fehlschlägt:
observe {
case Opened(foo) => invoke(foo)
}
mit
<console>:16: error: inferred type arguments [Any] do not conform to method invoke's
type parameter bounds [S <: Sys[S]]
case Opened(foo) => invoke(foo)
^
Wie kann ich fix die Teilfunktion, wenn Sys
, Foo
, invoke
, Update
, Opened
und observe
gegeben. Es ist erlaubt, einen Wert oder Typ Mitglied Foo
hinzuzufügen.
Das Problem ist, diese sofort ermüdend werden, wird meine ganze API auf einem Typkonstruktor Parameter basiert. Sie haben bald 'def foo [S1 <: Sys [S1]] (Balken: Balken {Typ S = S1}, baz: Baz {Typ S = S1}): Gaga {Typ S = S1} usw. –