Fremder Typfehler nach "Inlining" eines Wertes

9

Ich beobachte einen sehr seltsamen Typfehler mit shapeless.everywhere . Betrachten Sie das folgende Ammoniten-Skript, das mit load.module geladen wird:

%Vor%

Wenn ich jetzt versuche, das MAGIC VAL in diesem Skript "einzubinden", d. h. das val durch nur everywhere(incAge)(person) zu ersetzen, bekomme ich den folgenden Typfehler aus dem Nichts:

%Vor%

WAT?

Ich schätze, da ist Scalacs implizite Auflösung der schwarzen Magie schuld, aber kann ich mir nicht vorstellen, was hier vor sich geht. Es wäre großartig (und auf jeden Fall etwas aufschlussreich für mich), wenn mir jemand dieses Geheimnis enträtseln könnte.

Danke

    
lunaryorn 19.04.2016, 17:11
quelle

1 Antwort

4

Ich kenne den wahren Grund nicht für dieses Problem, aber es wird durch den erwarteten Typ verursacht, der die implizite Suche und die Typinferenz beeinflusst. Sie können die nichtlineare Version nicht kompilieren, indem Sie einen erwarteten Typ angeben:

%Vor%

Dies schlägt mit dem exakt gleichen Fehler fehl.

Andererseits können Sie die inline-Version kompilieren, indem Sie den erwarteten Typ (aka Rückgabetyp ) aus der Funktion entfernen:

%Vor%

Ich bin mir ziemlich sicher, dass man dies als "Bug" bezeichnen könnte, aber Inferenz ist nicht spezifiziert, daher wird es eine Weile dauern, um herauszufinden, was genau passieren sollte

    
larsrh 20.04.2016, 06:22
quelle

Tags und Links