もっとも関数的なコンパイラ
引用元:https://www.ioccc.org/2019/lynn/prog.c
審査員・作者による説明:https://www.ioccc.org/2019/lynn/index.html
Haskellサブセットのコンパイラ。
コンパイルすると、HaskellからCコード断片を生成するコンパイラになっている。
$ gcc -o prog prog.c
$ (./prog < fib.hs; cat prog.c) > fib.c
生成されたCコード断片とprog.cを連結してコンパイルすると、Haskellコードの意味で動作する。
$ gcc -o fib fib.c
$ ./fib
832040
かなり簡素にしたHaskellサブセットを受理して、独自のバイトコードを出力する。
Intのみ、他の型はスコットエンコーディングで実現mainは[Int] -> [Int]で入出力を表現する出力のバイトコードはC言語の#defineにくるんで出力し、prog.cと結合してコンパイル・実行することが前提になっている。
セルフホストするコンパイラ、正規表現の文字列列挙、強連結成分分解のサンプルコードが添付されている。