我正在研究一个大量使用Pipes库的Haskell程序。我将部分库移植到Haste。我碰到绊脚石的地方是javascript处理睡眠的奇怪方式。
我想写的是一个在发送结果之前延迟的简单管道
sleeper :: Int -> Pipe a a IO ()
sleeper time = forever $ do
temp <- await
sleep time
yield temp
然而,似乎睡眠就像回调一样。
setTimeout :: MonadIO m => Int -> IO () -> m ()
我试过
sleeper time = do
temp <- await
yield temp
setTimeout time $ sleeper time
但这些类型并没有正确排列。有没有办法让延迟管道?
答案 0 :(得分:1)
您可能希望查看https://github.com/imalsogreg/pipes-rt/blob/master/lib/Pipes/RealTime.hs#L127 那里有一个函数pauseUntil