hdf-0.14: Sound/DF/Uniform/LL/UId.hs
{-# Language FlexibleInstances #-}
-- | Unique identifiers.
module Sound.DF.Uniform.LL.UId where
import Control.Monad {- base -}
import Control.Monad.Trans.State {- transformers -}
import Data.Unique {- base -}
-- * UId Class
-- | Identifiers are integers.
type Id = Int
-- | Class of monads generating identifers
class (Monad m) => UId m where
generateId :: m Id
instance UId IO where
generateId = liftM (fromIntegral . hashUnique) newUnique
instance UId (State Id) where
generateId = do
i <- get
put (i + 1)
return i
-- | Evaluate /m/ 'DF'.
evalId :: State Id a -> a
evalId c = evalState c 0