コンジットのハンドルを取得しようと決め、うまくやっていると思っていましたが、コンジット 4 でこの単純なソースを作成しようとすると、無限ループが発生し、理由がわかりません。これは単純化されており、元のバージョンでは一時ファイル名が作成され、yield を介して返されます。これは () を返すだけです。
import Control.Monad.IO.Class
import Data.Conduit
import Data.Conduit.List as CL
tempfiles :: MonadIO m => Source m ()
tempfiles = loop
where
loop = do
x <- liftIO $ print "tempfile"
yield x
loop
私が実行した場合:
runResourceT $ (tempfiles $$ CL.take 5)
私は無限ループを取得します。5 回実行して 5 つの () のリストを表示しないのはなぜですか?