Das Paket reflection
bietet eine Klasse
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.
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:
Tags und Links haskell reflection typeclass