我正在开发一个大量使用 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
但是类型没有正确排列。有没有办法获得延迟管道?