Die Defunktionalisierung ist eine Programmtransformation, die Programme höherer Ordnung in Programme erster Ordnung umwandelt. Die Idee ist, dass es bei einem gegebenen Programm nur endlich viele Lambda-Abstraktionen gibt, sodass Sie jedes Lambda durch eine ID und jede Funktionsanwendung durch einen Aufruf einer Apply-Prozedur ersetzen können, die auf diese ID verzweigt. Dies wird manchmal verwendet in Compiler für funktionale Sprachen, aber seine Anwendbarkeit ist dadurch begrenzt , dass Entfunktionalisierung ist ein Vollprogramm - Transformation (statisch alle Funktionen des Programms kennen müssen), und so nur ganz-Programm Compiler nutzen es.
Allerdings Pottier und Gauthier haben einen gegebenen eine polymorphe typisierten Entfunktionalisierung Algorithmus eine anspruchsvolleres Typisierung Einbeziehung GADTs verwenden. Aufgrund ihrer Kodierung ist es nun möglich, ihrem Lambda-Datentyp einen Sammelbegriff hinzuzufügen, der kein Tag ist, aber eine Funktion höherer Ordnung enthält. Dies bedeutet, dass es möglich sein sollte, ihre Codierung zu verwenden, um sie modulweise zu defunktionalisieren.
Hat jemand dies getan und mich auf einen Compiler hingewiesen, der diese Idee verwendet? (Toy Compiler sind in Ordnung und sogar bevorzugt.)
quelle