この関数を考えてみましょう:
f as = if length as > 100 then length as else 100
関数は純粋なので、両方の呼び出しで長さが同じになることは明らかです。私の質問は、Haskell オプティマイザーが上記のコードを以下と同等のものに変換するかどうかです。
f as =
let l = length as
in if l > 100 then l else 100
もしそうなら、どのレベル設定がそれを可能にしますか? そうでない場合、なぜですか?このシナリオでは、関数の実行が終了するとすぐに導入された変数が解放されるため、この回答で説明されているように、メモリの浪費が理由になることはありません。
ローカルスコープのため、これはこの質問の複製ではないことに注意してください。したがって、根本的に異なる回答が得られる可能性があります。