module Jukebox.NameMap(NameMap, lookup, lookup_, insert, member, delete, (!), fromList, toList, singleton) where import Prelude hiding (lookup) import Jukebox.Name import Jukebox.Map(Map) import qualified Jukebox.Map as Map import Data.Int import qualified Jukebox.Seq as S type NameMap a = Map Int64 a lookup :: Name -> NameMap a -> Maybe a lookup x m = Map.lookup (uniqueId x) m lookup_ :: Named a => a -> NameMap b -> b lookup_ x m = case lookup (name x) m of Nothing -> error "NameMap.lookup_: key not found" Just y -> y insert :: Named a => a -> NameMap a -> NameMap a insert x m = Map.insert (uniqueId (name x)) x m member :: Named a => a -> NameMap a -> Bool member x m = keyMember (name x) m keyMember :: Name -> NameMap a -> Bool keyMember x m = Map.member (uniqueId x) m delete :: Named a => a -> NameMap a -> NameMap a delete x m = deleteKey (name x) m deleteKey :: Name -> NameMap a -> NameMap a deleteKey x m = Map.delete (uniqueId x) m (!) :: NameMap a -> Name -> a m ! x = m Map.! uniqueId (name x) fromList :: (S.List f, Named a) => f a -> NameMap a fromList xs = Map.fromList [ (uniqueId (name x), x) | x <- S.toList xs ] toList :: NameMap a -> [a] toList = Map.elems singleton :: Named a => a -> NameMap a singleton x = insert x Map.empty