module Env.ModuleAlias ( AliasEnv, initAliasEnv, importAliases ) where
import qualified Data.Map as Map (Map, empty, insert)
import Data.Maybe (fromMaybe)
import Curry.Base.Ident (ModuleIdent)
import Curry.Syntax (ImportDecl (..))
type AliasEnv = Map.Map ModuleIdent ModuleIdent
initAliasEnv :: AliasEnv
initAliasEnv :: AliasEnv
initAliasEnv = AliasEnv
forall k a. Map k a
Map.empty
importAliases :: [ImportDecl] -> AliasEnv
importAliases :: [ImportDecl] -> AliasEnv
importAliases = (ImportDecl -> AliasEnv -> AliasEnv)
-> AliasEnv -> [ImportDecl] -> AliasEnv
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr ImportDecl -> AliasEnv -> AliasEnv
bindAlias AliasEnv
initAliasEnv
bindAlias :: ImportDecl -> AliasEnv -> AliasEnv
bindAlias :: ImportDecl -> AliasEnv -> AliasEnv
bindAlias (ImportDecl _ mid :: ModuleIdent
mid _ alias :: Maybe ModuleIdent
alias _) = ModuleIdent -> ModuleIdent -> AliasEnv -> AliasEnv
forall k a. Ord k => k -> a -> Map k a -> Map k a
Map.insert ModuleIdent
mid (ModuleIdent -> AliasEnv -> AliasEnv)
-> ModuleIdent -> AliasEnv -> AliasEnv
forall a b. (a -> b) -> a -> b
$ ModuleIdent -> Maybe ModuleIdent -> ModuleIdent
forall a. a -> Maybe a -> a
fromMaybe ModuleIdent
mid Maybe ModuleIdent
alias