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