次に、式の形を見やすくするために、let
x = (let y = e1 in e2) in e3のようにネストしたletを、let
y = e1 in let x = e2 in e3のように平たくします。これはMinCamlでコンパイルされたプログラムの性能に(直接は)影響しませんが、コンパイラのデバッグや実験のときに、人間にとってわかりやすくするためです。
この簡約はAssoc.fで実装されています。let x = e1 in e2という形の式があったら、まず再帰によりe1をe1'に、e2をe2'に簡約します。そして、e1'がlet
... in eのようになっていたら、最後のinの直後にlet
x = e in e2'を挿入して、let
... in let x = e in e2'という式を返します。ちょっとトリッキーですが、できてしまえば非常に簡単です(assoc.mlはわずか21行です)。