packages feed

essence-of-live-coding-PortMidi-0.2.6: 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
  }