{-# LANGUAGE RecordWildCards #-}
module FRP.Rhine.ResamplingBuffer.MSF where
import Data.MonadicStreamFunction.InternalCore
import FRP.Rhine.ResamplingBuffer
msfBuffer
:: Monad m
=> MSF m (TimeInfo cl2, [(TimeInfo cl1, a)]) b
-> ResamplingBuffer m cl1 cl2 a b
msfBuffer = msfBuffer' []
where
msfBuffer'
:: Monad m
=> [(TimeInfo cl1, a)]
-> MSF m (TimeInfo cl2, [(TimeInfo cl1, a)]) b
-> ResamplingBuffer m cl1 cl2 a b
msfBuffer' as msf = ResamplingBuffer {..}
where
put ti1 a = return $ msfBuffer' ((ti1, a) : as) msf
get ti2 = do
(b, msf') <- unMSF msf (ti2, as)
return (b, msfBuffer msf')