packages feed

liquidhaskell-boot-0.9.10.1.2: src/Language/Haskell/Liquid/Name/LogicNameEnv.hs

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
       { lneLHName :: SEnv LHName
         -- | Haskell names that have a reflected counterpart
       , lneReflected :: GHC.NameEnv LHName
       }

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