再帰的なプログラムを繰り返し構造に変換するというのは、純粋関数型言語を操る上では(そして、そうでない言語を使う場合にもしばしば)、意外に重要な役割を果たす。というのは、それがある種の「継続」を扱う方法の一つだからだ。 たとえば、次のような再帰的なプログラムを考える。 ::Tree a = Tree a [(Tree a)] showRec (Tree a ts) f # f = fwrites (toString a) f f = foldl (flip ($)) f $ map showRec ts = f //テストデータ l a = Tree a [] t a ts = Tree a ts data = t 1 [t 2 [l 3, l 4], t 5 [l 6], t 7 [t 8 [l 9], t 10 [l 11]]] Start w = w --> stdio --> \(f