GHC/Types/Fixity/Env.hs

    module GHC.Types.Fixity.Env
       ( FixityEnv
       , FixItem (..)
       , emptyFixityEnv
       , lookupFixity
       , mkIfaceFixCache
       , emptyIfaceFixCache
       )
    where

    import GHC.Prelude

    import GHC.Types.Fixity
    import GHC.Types.Name
    import GHC.Types.Name.Env

    import GHC.Utils.Outputable

    -- | Fixity environment mapping names to their fixities
    type FixityEnv = NameEnv FixItem

    -- | Fixity information for an 'Name'. We keep the OccName in the range
    -- so that we can generate an interface from it
    data FixItem = FixItem OccName Fixity

    instance Outputable FixItem where
      ppr (FixItem occ fix) = ppr fix <+> ppr occ

    emptyFixityEnv :: FixityEnv
    emptyFixityEnv = emptyNameEnv

    lookupFixity :: FixityEnv -> Name -> Fixity
    lookupFixity env n = case lookupNameEnv env n of
                            Just (FixItem _ fix) -> fix
                            Nothing         -> defaultFixity

    -- | Creates cached lookup for the 'mi_fix_fn' field of 'ModIface'
    mkIfaceFixCache :: [(OccName, Fixity)] -> OccName -> Maybe Fixity
    mkIfaceFixCache pairs
      = \n -> lookupOccEnv env n
      where
       env = mkOccEnv pairs

    emptyIfaceFixCache :: OccName -> Maybe Fixity
    emptyIfaceFixCache _ = Nothing