関数型プログラミング言語Haskell Part20
■ このスレッドは過去ログ倉庫に格納されています
0795デフォルトの名無しさん
2013/01/07(月) 20:48:54.35おおざっぱに、どういうI/Oをするのか(あるいはしないのか)を決めるのに必要な式だけ評価される
たとえば、
putStrLn (f x)
を実行するには、f xを評価しないと何を表示していいか分からないので評価する
when (f x) $ putStrLn "Hello"
も、Helloを出力するかどうかを決めるのにf xの評価が必要だから評価する
return (f x)
は、f xの値が必要ないのでサンクをそのまま返す
let v = f x
in return v
も同じで、サンクを返す
return $! f x
は、このIOの正体がreturnであることを確定するために$!を評価する必要があって、
$!がf xの評価を発生させるので、サンクでなく値を返す
■ このスレッドは過去ログ倉庫に格納されています