Defunctionalizationคือการแปลงโปรแกรมที่แปลงโปรแกรมที่มีลำดับสูงกว่าไปเป็นโปรแกรมที่มีลำดับที่หนึ่ง แนวคิดคือให้โปรแกรมมีแลมบ์ดาบทคัดย่อจำนวน จำกัด เท่านั้นดังนั้นคุณสามารถแทนที่แลมบ์ดาแต่ละอันด้วยรหัสและแอปพลิเคชันฟังก์ชั่นแต่ละอันด้วยการเรียกใช้ขั้นตอนการสมัครที่แยกสาขาในรหัสนั้น บางครั้ง สิ่งนี้ถูกใช้ในคอมไพเลอร์สำหรับภาษาที่ใช้งานได้ แต่การบังคับใช้ของมันถูก จำกัด ด้วยความจริงที่ว่า defunctionalization คือการแปลงทั้งโปรแกรม (คุณต้องรู้จักฟังก์ชันทั้งหมดในโปรแกรม) และโปรแกรมคอมไพเลอร์ทั้งหมดเท่านั้นที่ใช้ มัน.
อย่างไรก็ตามPottier และ Gauthierได้กำหนดอัลกอริทึม defunctionalization พิมพ์ polymorphic โดยใช้การพิมพ์ที่ซับซ้อนมากขึ้นที่เกี่ยวข้องกับ GADT ตอนนี้เมื่อได้รับการเข้ารหัสแล้วก็เป็นไปได้ที่จะเพิ่มเคส catch-all ให้เป็นประเภทข้อมูลแลมบ์ดาที่ไม่ใช่แท็ก แต่มีฟังก์ชั่นการสั่งซื้อที่สูงกว่า ซึ่งหมายความว่าเป็นไปได้ที่จะใช้การเข้ารหัสเพื่อทำหน้าที่เป็นโมดุลย์ต่อโมดูล
มีใครทำสิ่งนี้และชี้ให้ฉันไปที่คอมไพเลอร์โดยใช้ความคิดนี้หรือไม่? (คอมไพเลอร์ของเล่นนั้นโอเคและในความเป็นจริงก็เป็นที่ต้องการ)