В 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
, приведенным выше?