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