{- | Run a generic Transport monad action in the IO monad using the IO transport types, e.g. TCP, UDP, or File. -} module Sound.OpenSoundControl.Transport.Monad.IO (T, Transport, send, recv, wait, waitFor, with, ) where import qualified Sound.OpenSoundControl.Transport as Trans import Sound.OpenSoundControl.Transport.Monad (C, send, recv, wait, waitFor, ) import Sound.OpenSoundControl.Transport (Transport) import Control.Monad.Trans.Reader (ReaderT(runReaderT)) type T t = ReaderT t IO -- | Bracket Open Sound Control communication. with :: Transport t => IO t -> T t a -> IO a with u = Trans.withTransport u . runReaderT