在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
-extension是可用的,是
do !x' <- return x
f x'
語義上與第一do
-expression上面給出?
我看給定的......但是,這是什麼說的'$回報的用處! ...'?這對嚴格的單子來說是否有意義? – hvr 2011-04-10 11:36:46
@hvr:如果monad在返回類型上是嚴格的,那麼是的。這個構造特別有用,對於monad來說,你通常要評估monad的副作用,而不是monad本身。 – fuz 2011-04-10 11:47:31
do塊中的最後一件事情是'return $! ...因爲(調用)函數的返回值總是被評估。即在'... >> = \ x - > return $! ...',一旦調用了lambda表達式,它將評估'($!)'應用程序。 – augustss 2011-04-10 12:56:33