В этом FAQговорится, что
Оператор seq — это
seq :: a -> b -> b
x
seq
y оценит x, достаточно, чтобы убедиться, что он не является нижним, затем отбросить результат и оценить y. Это может показаться бесполезным, но это означает, что x гарантированно будет оценен до рассмотрения y.
Это очень мило со стороны Haskell, но означает ли это, что в
x `seq` f x
стоимость вычисления x
будет оплачена дважды ("отбросить результат")?