Какова семантика «строгих возвратов»?

В вики-разделе 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, приведенное выше?

11
задан hvr 10 April 2011 в 09:43
поделиться