packages feed

essence-of-live-coding-PortMidi-0.2.8: src/LiveCoding/PortMidi/Internal.hs

module LiveCoding.PortMidi.Internal where

-- base
import Control.Monad (void)
import Control.Monad.IO.Class

-- PortMidi
import Sound.PortMidi

-- essence-of-live-coding
import LiveCoding.Handle

-- | A marker witnessing that PortMidi was initialized
data PortMidiHandle = PortMidiHandle

portMidiHandle :: (MonadIO m) => Handle m PortMidiHandle
portMidiHandle =
  Handle
    { create = do
        liftIO initialize
        return PortMidiHandle
    , destroy = const $ liftIO $ void terminate
    }