module LiveCoding.PortMidi.Internal where
import Control.Monad (void)
import Control.Monad.IO.Class
import Sound.PortMidi
import LiveCoding.Handle
data PortMidiHandle = PortMidiHandle
portMidiHandle :: (MonadIO m) => Handle m PortMidiHandle
portMidiHandle :: forall (m :: * -> *). MonadIO m => Handle m PortMidiHandle
portMidiHandle =
Handle
{ create :: m PortMidiHandle
create = do
IO (Either PMError PMSuccess) -> m (Either PMError PMSuccess)
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO IO (Either PMError PMSuccess)
initialize
PortMidiHandle -> m PortMidiHandle
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return PortMidiHandle
PortMidiHandle
, destroy :: PortMidiHandle -> m ()
destroy = m () -> PortMidiHandle -> m ()
forall a b. a -> b -> a
const (m () -> PortMidiHandle -> m ()) -> m () -> PortMidiHandle -> m ()
forall a b. (a -> b) -> a -> b
$ IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ IO (Either PMError PMSuccess) -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void IO (Either PMError PMSuccess)
terminate
}