module UHC.Light.Compiler.Gam.Base ( emptyGam, gamMap, gamLookup, gamLookupDup, gamPushNew, gamPop, gamTop, gamAddGam, gamAdd, gamPushGam, gamToAssocL, gamToAssocDupL, assocLToGam, assocDupLToGam, gamKeys , gamSingleton, gamInsert, gamUnion, gamUnions, gamFromAssocL , assocLToGamWithDups , gamToOnlyDups , gamPartition , gamMapElts , gamMapThr , gamUnzip , gamElts , gamNoDups , Gam , gamLookupMetaLev , gamMetaLevSingleton , gamUnionWith ) where import Data.List import UHC.Util.Utils import UHC.Light.Compiler.Base.HsName.Builtin import UHC.Light.Compiler.Base.Common import UHC.Light.Compiler.NameAspect import qualified Data.Set as Set import UHC.Light.Compiler.Opts.Base import Data.Maybe import qualified Data.Set as Set import qualified Data.Map as Map import UHC.Util.ScopeMapGam {-# LINE 47 "src/ehc/Gam/Base.chs" #-} type Gam k v = SGam k v {-# LINE 51 "src/ehc/Gam/Base.chs" #-} emptyGam :: Gam k v gamSingleton :: k -> v -> Gam k v gamLookup :: Ord k => k -> Gam k v -> Maybe v gamToAssocL :: Ord k => Gam k v -> AssocL k v gamPushNew :: Gam k v -> Gam k v gamPushGam :: Ord k => Gam k v -> Gam k v -> Gam k v gamPop :: Ord k => Gam k v -> (Gam k v,Gam k v) gamAddGam :: Ord k => Gam k v -> Gam k v -> Gam k v gamAdd :: Ord k => k -> v -> Gam k v -> Gam k v {-# LINE 76 "src/ehc/Gam/Base.chs" #-} gamLookupMetaLev :: Ord k => MetaLev -> k -> Gam k v -> Maybe v gamLookupMetaLev mlev k g = fmap head $ gamLookupMetaLevDup mlev k g {-# LINE 81 "src/ehc/Gam/Base.chs" #-} gamToAssocL g = [ (k,v) | (k,(v:_)) <- gamToAssocDupL g ] gamLookup k g = fmap head $ gamLookupDup k g {-# INLINE gamLookup #-} assocLToGam = gamUnions . map (uncurry gamSingleton) {-# LINE 90 "src/ehc/Gam/Base.chs" #-} emptyGam = emptySGam {-# INLINE emptyGam #-} gamSingleton = sgamSingleton {-# INLINE gamSingleton #-} gamPushNew = sgamPushNew {-# INLINE gamPushNew #-} gamPushGam = sgamPushGam {-# INLINE gamPushGam #-} gamPop = sgamPop {-# INLINE gamPop #-} gamAddGam = sgamUnion {-# INLINE gamAddGam #-} gamAdd k v g = sgamUnion (sgamSingleton k v) g {-# INLINE gamAdd #-} {-# LINE 113 "src/ehc/Gam/Base.chs" #-} gamTop :: Ord k => Gam k v -> Gam k v assocLToGam :: Ord k => AssocL k v -> Gam k v {-# LINE 123 "src/ehc/Gam/Base.chs" #-} gamTop = sgamTop {-# INLINE gamTop #-} {-# LINE 128 "src/ehc/Gam/Base.chs" #-} gamMetaLevSingleton = sgamMetaLevSingleton {-# INLINE gamMetaLevSingleton #-} {-# LINE 138 "src/ehc/Gam/Base.chs" #-} assocDupLToGam :: Ord k => AssocL k [v] -> Gam k v assocDupLToGam = sgamFromAssocDupL {-# INLINE assocDupLToGam #-} {-# LINE 144 "src/ehc/Gam/Base.chs" #-} assocLToGamWithDups :: Ord k => AssocL k v -> Gam k v assocLToGamWithDups = assocDupLToGam . assocLGroupSort {-# INLINE assocLToGamWithDups #-} {-# LINE 156 "src/ehc/Gam/Base.chs" #-} gamToAssocDupL :: Ord k => Gam k v -> AssocL k [v] gamToAssocDupL = sgamToAssocDupL {-# INLINE gamToAssocDupL #-} {-# LINE 162 "src/ehc/Gam/Base.chs" #-} gamToOnlyDups :: Ord k => Gam k v -> AssocL k [v] gamToOnlyDups g = [ x | x@(n,(_:_:_)) <- gamToAssocDupL g ] {-# LINE 172 "src/ehc/Gam/Base.chs" #-} gamNoDups :: Ord k => Gam k v -> Gam k v gamNoDups = sgamNoDups {-# INLINE gamNoDups #-} {-# LINE 183 "src/ehc/Gam/Base.chs" #-} gamMap :: (Ord k,Ord k') => ((k,v) -> (k',v')) -> Gam k v -> Gam k' v' gamMap = sgamMap {-# INLINE gamMap #-} {-# LINE 189 "src/ehc/Gam/Base.chs" #-} gamMapElts :: Ord k => (v -> v') -> Gam k v -> Gam k v' gamMapElts f = gamMap (\(n,v) -> (n,f v)) {-# INLINE gamMapElts #-} {-# LINE 203 "src/ehc/Gam/Base.chs" #-} gamPartition :: Ord k => (k -> v -> Bool) -> Gam k v -> (Gam k v,Gam k v) gamPartition = sgamPartitionWithKey {-# INLINE gamPartition #-} {-# LINE 224 "src/ehc/Gam/Base.chs" #-} gamMapThr :: (Ord k,Ord k') => ((k,v) -> t -> ((k',v'),t)) -> t -> Gam k v -> (Gam k' v',t) gamMapThr = sgamMapThr {-# INLINE gamMapThr #-} {-# LINE 230 "src/ehc/Gam/Base.chs" #-} gamKeys :: Ord k => Gam k v -> [k] gamKeys = assocLKeys . gamToAssocL {-# INLINE gamKeys #-} {-# LINE 236 "src/ehc/Gam/Base.chs" #-} gamElts :: Ord k => Gam k v -> [v] gamElts = assocLElts . gamToAssocL {-# INLINE gamElts #-} {-# LINE 247 "src/ehc/Gam/Base.chs" #-} gamLookupMetaLevDup :: Ord k => MetaLev -> k -> Gam k v -> Maybe [v] gamLookupMetaLevDup = sgamLookupMetaLevDup {-# INLINE gamLookupMetaLevDup #-} gamLookupDup :: Ord k => k -> Gam k v -> Maybe [v] gamLookupDup = gamLookupMetaLevDup metaLevVal {-# INLINE gamLookupDup #-} {-# LINE 264 "src/ehc/Gam/Base.chs" #-} gamUnzip :: Ord k => Gam k (v1,v2) -> (Gam k v1,Gam k v2) gamUnzip g = sgamUnzip g {-# INLINE gamUnzip #-} {-# LINE 274 "src/ehc/Gam/Base.chs" #-} gamInsert :: Ord k => k -> v -> Gam k v -> Gam k v gamInsert = gamAdd {-# INLINE gamInsert #-} gamUnion :: Ord k => Gam k v -> Gam k v -> Gam k v gamUnion = gamAddGam {-# INLINE gamUnion #-} gamFromAssocL :: Ord k => AssocL k v -> Gam k v gamFromAssocL = assocLToGam {-# INLINE gamFromAssocL #-} {-# LINE 288 "src/ehc/Gam/Base.chs" #-} gamUnionWith :: Ord k => (v -> [v] -> [v]) -> Gam k v -> Gam k v -> Gam k v gamUnionWith cmb = sgamUnionWith (Just cmb) {-# INLINE gamUnionWith #-} {-# LINE 294 "src/ehc/Gam/Base.chs" #-} gamUnions :: Ord k => [Gam k v] -> Gam k v gamUnions [] = emptyGam gamUnions gs = foldr1 gamUnion gs