<p dir="ltr">Currently, it's defined like this:</p>
<p dir="ltr">cseProgram :: CoreProgram -> CoreProgram<br>
cseProgram binds = cseBinds emptyCSEnv binds</p>
<p dir="ltr">cseBinds :: CSEnv -> [CoreBind] -> [CoreBind]<br>
cseBinds _ [] = []<br>
cseBinds env (b:bs) = (b':bs')<br>
                    where<br>
                      (env1, b') = cseBind env b<br>
                      bs' = cseBinds env1 bs</p>
<p dir="ltr">Couldn't we replace all that with the following? (Thanks to Cale for suggesting mapAccumL—I was using scanl because I knew it, but it was not a great fit.)</p>
<p dir="ltr">cseProgram = snd . mapAccumL cseBind emptyCSEnv</p>
<p dir="ltr">David Feuer</p>