never executed always true always false
    1 {-
    2 (c) The University of Glasgow 2006
    3 (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
    4 
    5 \section[TyConEnv]{@TyConEnv@: tyCon environments}
    6 -}
    7 
    8 
    9 {-# LANGUAGE ScopedTypeVariables #-}
   10 
   11 
   12 module GHC.Core.TyCon.Env (
   13         -- * TyCon environment (map)
   14         TyConEnv,
   15 
   16         -- ** Manipulating these environments
   17         mkTyConEnv, mkTyConEnvWith,
   18         emptyTyConEnv, isEmptyTyConEnv,
   19         unitTyConEnv, nonDetTyConEnvElts,
   20         extendTyConEnv_C, extendTyConEnv_Acc, extendTyConEnv,
   21         extendTyConEnvList, extendTyConEnvList_C,
   22         filterTyConEnv, anyTyConEnv,
   23         plusTyConEnv, plusTyConEnv_C, plusTyConEnv_CD, plusTyConEnv_CD2, alterTyConEnv,
   24         lookupTyConEnv, lookupTyConEnv_NF, delFromTyConEnv, delListFromTyConEnv,
   25         elemTyConEnv, mapTyConEnv, disjointTyConEnv,
   26 
   27         DTyConEnv,
   28 
   29         emptyDTyConEnv, isEmptyDTyConEnv,
   30         lookupDTyConEnv,
   31         delFromDTyConEnv, filterDTyConEnv,
   32         mapDTyConEnv, mapMaybeDTyConEnv,
   33         adjustDTyConEnv, alterDTyConEnv, extendDTyConEnv, foldDTyConEnv
   34     ) where
   35 
   36 import GHC.Prelude
   37 
   38 import GHC.Types.Unique.FM
   39 import GHC.Types.Unique.DFM
   40 import GHC.Core.TyCon (TyCon)
   41 
   42 import GHC.Data.Maybe
   43 
   44 {-
   45 ************************************************************************
   46 *                                                                      *
   47 \subsection{TyCon environment}
   48 *                                                                      *
   49 ************************************************************************
   50 -}
   51 
   52 -- | TyCon Environment
   53 type TyConEnv a = UniqFM TyCon a       -- Domain is TyCon
   54 
   55 emptyTyConEnv       :: TyConEnv a
   56 isEmptyTyConEnv     :: TyConEnv a -> Bool
   57 mkTyConEnv          :: [(TyCon,a)] -> TyConEnv a
   58 mkTyConEnvWith      :: (a -> TyCon) -> [a] -> TyConEnv a
   59 nonDetTyConEnvElts  :: TyConEnv a -> [a]
   60 alterTyConEnv       :: (Maybe a-> Maybe a) -> TyConEnv a -> TyCon -> TyConEnv a
   61 extendTyConEnv_C    :: (a->a->a) -> TyConEnv a -> TyCon -> a -> TyConEnv a
   62 extendTyConEnv_Acc  :: (a->b->b) -> (a->b) -> TyConEnv b -> TyCon -> a -> TyConEnv b
   63 extendTyConEnv      :: TyConEnv a -> TyCon -> a -> TyConEnv a
   64 plusTyConEnv        :: TyConEnv a -> TyConEnv a -> TyConEnv a
   65 plusTyConEnv_C      :: (a->a->a) -> TyConEnv a -> TyConEnv a -> TyConEnv a
   66 plusTyConEnv_CD     :: (a->a->a) -> TyConEnv a -> a -> TyConEnv a -> a -> TyConEnv a
   67 plusTyConEnv_CD2    :: (Maybe a->Maybe a->a) -> TyConEnv a -> TyConEnv a -> TyConEnv a
   68 extendTyConEnvList  :: TyConEnv a -> [(TyCon,a)] -> TyConEnv a
   69 extendTyConEnvList_C :: (a->a->a) -> TyConEnv a -> [(TyCon,a)] -> TyConEnv a
   70 delFromTyConEnv     :: TyConEnv a -> TyCon -> TyConEnv a
   71 delListFromTyConEnv :: TyConEnv a -> [TyCon] -> TyConEnv a
   72 elemTyConEnv        :: TyCon -> TyConEnv a -> Bool
   73 unitTyConEnv        :: TyCon -> a -> TyConEnv a
   74 lookupTyConEnv      :: TyConEnv a -> TyCon -> Maybe a
   75 lookupTyConEnv_NF   :: TyConEnv a -> TyCon -> a
   76 filterTyConEnv      :: (elt -> Bool) -> TyConEnv elt -> TyConEnv elt
   77 anyTyConEnv         :: (elt -> Bool) -> TyConEnv elt -> Bool
   78 mapTyConEnv         :: (elt1 -> elt2) -> TyConEnv elt1 -> TyConEnv elt2
   79 disjointTyConEnv    :: TyConEnv a -> TyConEnv a -> Bool
   80 
   81 nonDetTyConEnvElts x   = nonDetEltsUFM x
   82 emptyTyConEnv          = emptyUFM
   83 isEmptyTyConEnv        = isNullUFM
   84 unitTyConEnv x y       = unitUFM x y
   85 extendTyConEnv x y z   = addToUFM x y z
   86 extendTyConEnvList x l = addListToUFM x l
   87 lookupTyConEnv x y     = lookupUFM x y
   88 alterTyConEnv          = alterUFM
   89 mkTyConEnv     l       = listToUFM l
   90 mkTyConEnvWith f       = mkTyConEnv . map (\a -> (f a, a))
   91 elemTyConEnv x y          = elemUFM x y
   92 plusTyConEnv x y          = plusUFM x y
   93 plusTyConEnv_C f x y      = plusUFM_C f x y
   94 plusTyConEnv_CD f x d y b = plusUFM_CD f x d y b
   95 plusTyConEnv_CD2 f x y    = plusUFM_CD2 f x y
   96 extendTyConEnv_C f x y z  = addToUFM_C f x y z
   97 mapTyConEnv f x           = mapUFM f x
   98 extendTyConEnv_Acc x y z a b  = addToUFM_Acc x y z a b
   99 extendTyConEnvList_C x y z = addListToUFM_C x y z
  100 delFromTyConEnv x y      = delFromUFM x y
  101 delListFromTyConEnv x y  = delListFromUFM x y
  102 filterTyConEnv x y       = filterUFM x y
  103 anyTyConEnv f x          = foldUFM ((||) . f) False x
  104 disjointTyConEnv x y     = disjointUFM x y
  105 
  106 lookupTyConEnv_NF env n = expectJust "lookupTyConEnv_NF" (lookupTyConEnv env n)
  107 
  108 -- | Deterministic TyCon Environment
  109 --
  110 -- See Note [Deterministic UniqFM] in "GHC.Types.Unique.DFM" for explanation why
  111 -- we need DTyConEnv.
  112 type DTyConEnv a = UniqDFM TyCon a
  113 
  114 emptyDTyConEnv :: DTyConEnv a
  115 emptyDTyConEnv = emptyUDFM
  116 
  117 isEmptyDTyConEnv :: DTyConEnv a -> Bool
  118 isEmptyDTyConEnv = isNullUDFM
  119 
  120 lookupDTyConEnv :: DTyConEnv a -> TyCon -> Maybe a
  121 lookupDTyConEnv = lookupUDFM
  122 
  123 delFromDTyConEnv :: DTyConEnv a -> TyCon -> DTyConEnv a
  124 delFromDTyConEnv = delFromUDFM
  125 
  126 filterDTyConEnv :: (a -> Bool) -> DTyConEnv a -> DTyConEnv a
  127 filterDTyConEnv = filterUDFM
  128 
  129 mapDTyConEnv :: (a -> b) -> DTyConEnv a -> DTyConEnv b
  130 mapDTyConEnv = mapUDFM
  131 
  132 mapMaybeDTyConEnv :: (a -> Maybe b) -> DTyConEnv a -> DTyConEnv b
  133 mapMaybeDTyConEnv = mapMaybeUDFM
  134 
  135 adjustDTyConEnv :: (a -> a) -> DTyConEnv a -> TyCon -> DTyConEnv a
  136 adjustDTyConEnv = adjustUDFM
  137 
  138 alterDTyConEnv :: (Maybe a -> Maybe a) -> DTyConEnv a -> TyCon -> DTyConEnv a
  139 alterDTyConEnv = alterUDFM
  140 
  141 extendDTyConEnv :: DTyConEnv a -> TyCon -> a -> DTyConEnv a
  142 extendDTyConEnv = addToUDFM
  143 
  144 foldDTyConEnv :: (elt -> a -> a) -> a -> DTyConEnv elt -> a
  145 foldDTyConEnv = foldUDFM