    {- |
    For use in Tree and Graph modules.
    -}
    module Haskore.General.TagDictionary (T, empty, insert, lookup, singleton) where

    import Haskore.General.Map (Map, empty, singleton)
    import qualified Haskore.General.Map as Map

    import Prelude hiding (lookup)

    type T tag tree = Map tag tree

    insert :: Ord tag => tag -> tree -> Map tag tree -> Map tag tree
    insert =
       Map.insertWith
          (error "TagDictionary.insert: multiple definition of tag")

    lookup :: (Ord tag) => Map tag tree -> tag -> tree
    lookup dict =
       Map.findWithDefault dict (error "unknown loop tag")