正格評価
strict evaluation
積極評価、先行評価、eager evaluation
関数呼び出しの際に、bodyより先に引数を評価する
関数の引数が本体で使われるかどうかに関係なく常に評価される
最悪時データ構造は書けるが、償却データ構造は書けない
Haskellでは$の代わりに、$!を使えば正格評価になる
e.g. 以下のような関数twoを考える
code:hs
two = const 2
two $! undefinedとすれば、結果はundefinedになる
Haskellは、$!を使っても弱頭部正規形を使うので、
take 5 $! [1..]はちゃんと停止する ref
https://haskell.e-bigmoon.com/posts/2018/06-25-all-about-strictness