module Language.Haskell.Liquid.Name.LogicNameEnv
  ( LogicNameEnv(..)
  , extendLogicNameEnv
  ) where

import qualified Liquid.GHC.API         as GHC
import           Language.Fixpoint.Types
import           Language.Haskell.Liquid.Types.Names


-- | For every symbol tells the corresponding LHName and Sort
--
-- Symbols are expected to have been created by 'lhNameToResolvedSymbol'.
--
data LogicNameEnv = LogicNameEnv
       { LogicNameEnv -> SEnv LHName
lneLHName :: SEnv LHName
         -- | Haskell names that have a reflected counterpart
       , LogicNameEnv -> NameEnv LHName
lneReflected :: GHC.NameEnv LHName
       }

extendLogicNameEnv :: LogicNameEnv -> [LHName] -> LogicNameEnv
extendLogicNameEnv :: LogicNameEnv -> [LHName] -> LogicNameEnv
extendLogicNameEnv LogicNameEnv
env [LHName]
ns =
    LogicNameEnv
env
      { lneLHName =
          foldr (uncurry insertSEnv) (lneLHName env) [ (lhNameToResolvedSymbol n, n) | n <- ns]
      }