hsc3-0.15: Sound/SC3/UGen/Identifier.hs
-- | Typeclass and functions to manage UGen identifiers.
module Sound.SC3.UGen.Identifier where
import qualified Data.Hashable as H {- hashable -}
-- | Typeclass to constrain UGen identifiers.
class H.Hashable a => ID a where
resolveID :: a -> Int
resolveID = H.hash
instance ID Int where
instance ID Integer where
instance ID Char where
instance ID Float where
instance ID Double where
-- | Hash 'ID's /p/ and /q/ and sum to form an 'Int'.
--
-- > 'a' `joinID` (1::Int) == 1627429042
joinID :: (ID a,ID b) => a -> b -> Int
joinID p q = H.hash p `H.hashWithSalt` H.hash q