Pipes ライブラリを多用する Haskell プログラムに取り組んでいます。ライブラリの一部をHasteに移植しています。私がつまずきにぶつかった場所の 1 つは、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
しかし、タイプは適切に並んでいません。遅延パイプを取得する方法はありますか?