{- | An instance of 'Haskore.Interface.SuperCollider.Channel.T' using a 'StateT' monad transformer. -} module Haskore.Interface.SuperCollider.Channel.State where import qualified Control.Monad.Trans.State as State import Control.Monad.Trans.State (StateT) import qualified Haskore.Interface.SuperCollider.Channel as ChannelMng import Haskore.Interface.SuperCollider.Channel (Channel, NumberChannels) manager :: Monad m => ChannelMng.T (StateT Channel m) manager = ChannelMng.Cons next reset next :: Monad m => NumberChannels -> StateT Channel m Channel next inc = do num <- State.get State.modify (inc+) return num reset :: Monad m => StateT Channel m () reset = State.put ChannelMng.least