module ScopeNames where import EnvM import DefinedNames(TypedIdent) import MUtils import Recursive type Env i = [TypedIdent i] class ScopeNames i e s1 s2 | s1->i, s1 e->s2 where scopeNames :: (Env i->e->e)->s1->EnvM e s2 instance ScopeNames i e s1 s2 => ScopeNames i e [s1] [s2] where scopeNames = mapM . scopeNames instance ScopeNames i e s1 s2 => ScopeNames i e (Maybe s1) (Maybe s2) where scopeNames ext = seqMaybe . fmap (scopeNames ext) instance (ScopeNames i e a1 a2,ScopeNames i e b1 b2) => ScopeNames i e (a1,b1) (a2,b2) where scopeNames ext (a,b) = (,) # scopeNames ext a <# scopeNames ext b scopeNamesRec ext s = r # scopeNames ext (struct s) {- class ScopeNames i s | s->i where envNames :: s -> ScopeM i s penv x = (,) x # getEnv --cpenv = penv . HsCon --vpenv = penv . HsVar scopeNames f env0 = runEnv [] . seqNames . flip envNames env0 . mapNames f extend env1 m = \ env2 -> m (env1++env2) -}