Frage zur Subtypisierung von Handlern in „Ein Effektsystem für algebraische Effekte und Handler“

8

Ich hatte eine Frage zur Untertypisierung in der Arbeit "Ein Effektsystem für algebraische Effekte und Handler" . Ich habe mich gefragt, warum es keine Subtypisierungsregel zum Hinzufügen von Effekten auf beiden Seiten eines Handlertyps gibt.

T!AR!BT!(AC)R!(BC)

Dies ist nützlich, wenn Sie eine Variable mit einem Handlertyp auf eine Berechnung mit mehr Effekten anwenden, als der Handlertyp auf der linken Seite hat.

Sie können beiden Seiten eines Handlertyps mithilfe der Typisierungsregel für Handler Effekte hinzufügen, dies funktioniert jedoch nicht für Variablen. Zum Beispiel, wenn der Handler ein Argument für eine Funktion ist.

Labbekak
quelle

Antworten:

9

Ich bin überrascht, dass wir diese Frage nicht öfter bekommen, denn Andrej und ich haben lange überlegt, diese Regel hinzuzufügen, und geglaubt, ihre Richtigkeit bewiesen zu haben. Aber am Ende stellte sich heraus, dass es falsch war, zumindest in einer Call-by-Value-Einstellung (ich habe gehört, dass es im Call-by-Push-Wert besser funktioniert).

BAAB

B!{lookup,update}(AB!)!
Beachten Sie die beiden leeren Sätze auf der rechten Seite. Die erste besagt, dass die resultierende Funktion rein ist, die zweite, dass bei der Erzeugung dieser Funktion keine Auswirkungen auftreten.

Δlookupupdate

B!({lookup,update}Δ)(AB!)!Δ
B!({lookup,update}Δ)(AB!Δ)!Δ
Δ
Matija Pretnar
quelle
1
Danke Matija! Wie kommst du davon, diese Regel nicht zu haben? Wie können Sie den Statushandler (wenn er nicht inline ist) auf eine Berechnung anwenden, die mehr Auswirkungen hat als nur nachzuschlagen und zu aktualisieren? Ich denke, Sie müssten alle Handler einbinden?
Labbekak
1
A,B,Δ.B!({lookup,update}Δ)(AB!Δ)!Δ