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