ixIter limit f a = do
    a' <- f a
    if alphaEq a a'
      then return a
      else fixIter (limit-1) f a'



-- | Perform common sub-expression elimination and variable hoisting

fixIter limit f a = do
    a' <- f a
    if alphaEq a a'
      then return a
      else fixIter (limit-1) f a'



-- | Perform common sub-expression elimination and variable hoisting
fixIter limit f a = do
    a' <- f a
    if alphaEq a a'
      then return a
      else fixIter (limit-1) f a'



-- | Perform common sub-expression elimination and variable hoisting