Besteht eine Inkohärenz der Reflektion?

8

Das Paket reflection bietet eine Klasse

%Vor%

und eine Funktion

%Vor%

Wenn man nur diese annimmt, könnte man die Sache ziemlich durcheinander bringen, indem man zum Beispiel die Instanz gibt

%Vor%

Dies wäre schlecht, weil zum Beispiel

%Vor%

könnte berechtigterweise entweder 1 (über den üblichen Reflexionsprozess) oder 0 (durch Spezialisierung der übergebenen Funktion vor der Anwendung von reify ) erzeugen.

In Wirklichkeit scheint dieser spezielle Exploit durch die Aufnahme einiger Reifies Instanzen in Data.Reflection blockiert zu sein. Die böse Instanz, die ich beschrieben habe, wird als überlappend zurückgewiesen. Wenn überlappende Instanzen aktiviert sind, glaube ich, dass die Spezialisierung möglicherweise durch die sich überlagernde Unsicherheit blockiert wird.

Dennoch frage ich mich, ob es eine Möglichkeit gibt, dies mit einer zwielichtigen Instanz zu entlarven, vielleicht mit Hilfe von GADTs oder ähnlichem.

    
dfeuer 10.01.2016, 17:43
quelle

1 Antwort

4

Ich sage vorläufig, dass es keine Inkohärenz riskiert. Nach ein wenig Bastelei, der beste Weg, ich könnte zu entführen reflect verwendet INCOHERENT , was nicht überraschend genug ist, um Inkohärenz zu ergeben:

%Vor%     
András Kovács 10.01.2016 20:32
quelle

Tags und Links