비 기능화 는 고차 프로그램을 1 차 프로그램으로 변환하는 프로그램 변환입니다. 아이디어는 프로그램이 주어질 때, 람다-추상어가 아주 많기 때문에 각 람다를 id로, 각 함수 응용 프로그램을 해당 id에서 분기되는 적용 프로 시저에 대한 호출로 바꿀 수 있다는 것입니다. 이것은 때때로 함수형 언어를위한 컴파일러에서 사용 되지만, 기능 해제는 전체 프로그램 변환 (정적으로 프로그램의 모든 함수를 알아야 함)이라는 사실에 의해 적용 가능성이 제한되므로 전체 프로그램 컴파일러 만 사용합니다. 그것.
그러나 Pottier와 Gauthier 는 GADT와 관련된보다 정교한 타이핑을 사용하여 다형성 유형의 기능 해제 알고리즘을 제공합니다. 이제 인코딩이 주어지면 태그가 아니지만 고차 함수를 포함하는 람다 데이터 유형에 모든 경우를 추가 할 수 있습니다. 즉, 인코딩을 사용하여 모듈별로 기능을 해제 할 수 있어야합니다.
누구 든지이 작업을 수행 하고이 아이디어를 사용하여 컴파일러를 알려 주었습니까? (토이 컴파일러는 괜찮으며 실제로 선호됩니다.)