В вики-разделе Haskell Performance Resource дальнейшее объяснение рекомендации дано
- Используйте строгие возвраты (
return $! ...
), если они вам абсолютно не нужны.
Почему это хорошо? Когда именно ...
-выражение (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
выражением, приведенным выше?