Khử nhiễu là một chuyển đổi chương trình chuyển đổi các chương trình bậc cao thành chương trình bậc nhất. Ý tưởng là đưa ra một chương trình, chỉ có rất nhiều tóm tắt lambda, vì vậy bạn có thể thay thế mỗi lambda bằng một id và mỗi ứng dụng chức năng bằng một lệnh gọi đến một thủ tục áp dụng phân nhánh trên id đó. Điều này đôi khi được sử dụng trong các trình biên dịch cho các ngôn ngữ chức năng, nhưng khả năng ứng dụng của nó bị hạn chế bởi thực tế là chức năng chuyển đổi là một chuyển đổi toàn bộ chương trình (bạn phải biết một cách tĩnh tất cả các chức năng trong chương trình), và vì vậy chỉ các trình biên dịch toàn chương trình mới sử dụng nó
Tuy nhiên, Pottier và Gauthier có một thuật toán phân rã đánh máy đa hình đã cho bằng cách sử dụng một kiểu gõ phức tạp hơn liên quan đến GADT. Bây giờ, với mã hóa của họ, có thể thêm trường hợp bắt tất cả vào kiểu dữ liệu lambda của họ không phải là thẻ, nhưng có chứa hàm bậc cao hơn. Điều này có nghĩa là có thể sử dụng mã hóa của chúng để phân rã trên cơ sở từng mô-đun.
Có ai đã làm điều này, và chỉ cho tôi một trình biên dịch sử dụng ý tưởng này? (Trình biên dịch đồ chơi là ổn, và trên thực tế được ưa thích.)