8
GHCはデフォルトで次の関数でテールコール最適化を実行しますか?それについての奇妙なことは、IOアクションを再帰的に定義していることですが、TCOできない理由はわかりません。あなたのコードがGHCはテールコールでIOアクションを最適化できますか?
consume store (x:xs) = putMVar store >> consume store xs
と等価であるので
import Control.Concurrent.MVar
consume :: MVar a -> [a] -> IO()
consume _ [] = return()
consume store (x:xs) = do putMVar store x
consume store xs