{-
Given a set of names to replace, an expression to replace them with,
and an expression e, check if e is a name in our list,
and if it is, replace it with the given substitution
-}
subOneLevel :: [Name] ->  Expression -> Expression -> Expression
subOneLevel names subExp e@(EName varName)   =
  if (varName `elem` names)
  then subExp
  else e
subOneLevel :: [Name] ->  Expression -> Expression -> Expression
subOneLevel names subExp e@(EName varName)   =
  if (varName `elem` names)
  then subExp
  else e
subOneLevel names subExp e@(EName varName)   =
  if (varName `elem` names)
  then subExp
  else e