睡在Haste和Haskell的管道

时间:2014-08-29 15:31:13

标签: haskell haskell-pipes haste

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

但这些类型并没有正确排列。有没有办法让延迟管道?

1 个答案:

答案 0 :(得分:1)

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