1

我正在开发一个大量使用 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

但是类型没有正确排列。有没有办法获得延迟管道?

4

1 回答 1

1

你可能想看看https://github.com/imalsogreg/pipes-rt/blob/master/lib/Pipes/RealTime.hs#L127 那里有一个函数 pauseUntil

于 2014-08-29T18:00:24.537 回答