Bizzare Typ Inferenz Einschränkung - mehrere Typ Parameter

8

Warum kompiliert das nicht?

%Vor%

Ergebnis:

%Vor%

Die Dinge beginnen zu kompilieren, wenn entweder:

  • type Parameter von flatMap Aufruf sind explizit
  • SA ist kovariant (wtf?)
  • ein anderer Typ als Nothing wird in p2 (z. B. Null )
  • verwendet
  • SB tritt nicht im Rückgabetyp von flatMap auf oder tritt in kovarianter Position dieses Rückgabetyps auf (z. B. Rückgabetyp Option[SB] )

Die oben genannten Problemumgehungen sind jedoch für mich nicht akzeptabel.

    
ghik 19.08.2015, 13:43
quelle

2 Antworten

2

@ retronyms Kommentar zu SI-9453 erläutert das Verhalten, das Sie sehen. Hier ist eine Art Workaround ...

Wir können einen Typ synthetisieren, der äquivalent zu Nothing ist, was nicht dazu führt, dass der Tipper die Inferenzlösung zurückzieht,

%Vor%

ie. Nothing mit einer Dummy-Verfeinerung. Jetzt mit dem Beispiel der Frage,

%Vor%     
Miles Sabin 01.09.2015, 15:01
quelle
2

Um Ihr Problem besser zu verstehen, kann es wie folgt vereinfacht werden:

%Vor%

was zu folgendem Kompilierungsfehler führt:

%Vor%

Eine mögliche Lösung besteht darin, das Snippet wie folgt zu aktualisieren:

%Vor%

Zurück zu Ihrem ursprünglichen Code:

%Vor%     
Federico Pellegatta 28.08.2015 10:35
quelle

Tags und Links