В Haskell Performance Resource вики-раздел, дальнейшая поясняемая рекомендация дается
- Используйте строгие возвраты (
return $! ...), если они вам не нужны.
Почему это хорошо? Когда именно выражение ... -expression (Whnf-) принудительно?
Учитывая монад-закон "левой личности" и определение
f $! x = x `seq` f x
Я могу переписать (в do -notation`):
do x' <- return $! x
f x'
к
do x' <- x `seq` return x
f x'
Но, похоже, я не могу добраться до
do f $! x
PS: Если доступно расширение BangPatterns, это
do !x' <- return x
f x'
семантически совпадает с первым выражением do, приведенным выше?