hsc3-0.12: Sound/SC3/UGen/UId.hs
-- | Unique identifier class for use by non-deterministic (noise) and
-- non-sharable (demand) unit generators.
module Sound.SC3.UGen.UId where
import Control.Monad
import Control.Monad.IO.Class as M {- transformers -}
import Control.Monad.Trans.Reader
import Data.Unique
import Sound.OSC.Transport.FD as T
-- | A class indicating a monad that will generate a sequence of
-- unique integer identifiers.
class (Functor m,M.MonadIO m) => UId m where
generateUId :: m Int
generateUId = fmap hashUnique (M.liftIO newUnique)
instance UId IO where
generateUId = liftM hashUnique newUnique
instance (T.Transport t,Functor io,MonadIO io) => UId (ReaderT t io) where
generateUId = ReaderT (M.liftIO . const generateUId)