module Sound.OpenSoundControl.Transport.Monad
(Transport, send, recv, wait, close, withTransport, IO) where
import qualified Sound.OpenSoundControl.Transport as Trans
import Sound.OpenSoundControl.Transport (Transport)
import Sound.OpenSoundControl.OSC (OSC)
import Control.Monad.Reader (ReaderT(ReaderT, runReaderT))
import Prelude hiding (IO)
import qualified System.IO as Sys
type IO t a = ReaderT t Sys.IO a
send :: Transport t => OSC -> IO t ()
send = ReaderT . flip Trans.send
recv :: Transport t => IO t OSC
recv = ReaderT Trans.recv
wait :: Transport t => String -> IO t OSC
wait = ReaderT . flip Trans.wait
close :: Transport t => IO t ()
close = ReaderT Trans.close
withTransport :: Transport t => Sys.IO t -> IO t a -> Sys.IO a
withTransport u = Trans.withTransport u . runReaderT