Leser Monad mit Scalaz

8

Ich versuche, die Reader-Monade mit scalaz so zu definieren:

%Vor%

aber ich bekomme einen Compilerfehler:

%Vor%

Warum ist das so?

Danke, Levi

    
Levi Greenspan 19.07.2010, 19:51
quelle

1 Antwort

16

Dieser Fehler ist ziemlich undurchsichtig, selbst nach Scalas Standards. Methodennamen, die mit = enden, werden speziell behandelt - sie werden zuerst als normale Bezeichner betrachtet, und andernfalls werden sie zu einer Selbstzuweisung erweitert.

%Vor%

Wenn Sie die syntaktische Interpretation Ihres Programms nicht verstehen, ist es eine gute Idee, scalac -Xprint:parser auszuführen, um zu sehen, was vor sich geht. In ähnlicher Weise können Sie -Xprint:typer oder -Xprint:jvm verwenden, um spätere Phasen der Programmumwandlung zu sehen.

Also, wie rufst du >>= auf deinem Reader an? Zuallererst müssen Sie das Argument Env explizit an env übergeben. Das resultierende Reader[Env, Env] muss dann in ein MA[M[_], A] konvertiert werden. Für einfache Typkonstruktoren ist die implizite Konvertierung MAs#ma ausreichend. Allerdings muss der Konstruktor Reader des Param-Typs teilweise angewendet werden. Dies bedeutet, dass er nicht abgeleitet werden kann und stattdessen eine spezifische implizite Konvertierung erforderlich ist.

Die Situation würde erheblich verbessert, wenn Adriaan jemals einen freien Nachmittag findet, um eine Vereinheitlichung höherer Ordnung für die Typkonstruktor-Inferenz zu implementieren. . :)

Bis dahin, hier ist dein Code. Ein paar weitere Kommentare sind inline.

%Vor%     
retronym 19.07.2010, 20:57
quelle

Tags und Links