opensoundcontrol-ht-0.1.1: src/Sound/OpenSoundControl/Transport/Monad/ByteString.hs
module Sound.OpenSoundControl.Transport.Monad.ByteString (run, ) where
import qualified Sound.OpenSoundControl.Transport.Monad as TM
import Sound.OpenSoundControl.OSC (encodeOSC, OSC, )
import Control.Monad.Trans.Reader (ReaderT, runReaderT, ask, )
import Control.Monad.Trans.Class (lift, )
import qualified Data.ByteString.Lazy as B
import qualified Data.Binary.Put as Put
newtype T a = Cons (ReaderT OSC Put.PutM a)
deriving (Functor, Monad)
instance TM.C T where
send msg = Cons $ lift $
let b = encodeOSC msg
in Put.putWord32be (fromIntegral (B.length b)) >>
Put.putLazyByteString b
recv = Cons ask
{- |
Write sent messages to a ByteString.
All 'recv' calls are answered with @msg@.
-}
run :: OSC -> T () -> B.ByteString
run msg (Cons m) = Put.runPut (runReaderT m msg)