CurryInfo: failfree-4.0.0 / Main.renameLetVars

definition:
 
renameLetVars :: [((VarIndex, TypeExpr), TAExpr)] -> TAExpr
              -> TransStateM ([((VarIndex, TypeExpr), TAExpr)], TAExpr)
renameLetVars bindings exp = do
  fv <- getFreshVarIndex
  let args = map (fst . fst) bindings
      minarg = minimum (0 : args)
      maxarg = maximum (0 : args)
      rnm i = if i `elem` args then i - minarg + fv else i
      nargs = map (\ ((v,t),_) -> (rnm v,t)) bindings
  setFreshVarIndex (fv + maxarg - minarg + 1)
  addVarTypes nargs
  return (map (\ ((v,t),be) -> ((rnm v,t), rnmAllVars rnm be)) bindings,
          rnmAllVars rnm exp)
demand:
 no demanded arguments
deterministic:
 deterministic operation
documentation:
 
Rename let-bound variables in a let expression.
indeterministic:
 referentially transparent operation
infix:
 no fixity defined
name:
 renameLetVars
precedence:
 no precedence defined
result-values:
 _
signature:
 [((Prelude.Int, FlatCurry.Types.TypeExpr), FlatCurry.Annotated.Types.AExpr FlatCurry.Types.TypeExpr)]
-> FlatCurry.Annotated.Types.AExpr FlatCurry.Types.TypeExpr
-> Control.Monad.Trans.State.StateT TransState Prelude.IO ([((Prelude.Int, FlatCurry.Types.TypeExpr), FlatCurry.Annotated.Types.AExpr FlatCurry.Types.TypeExpr)], FlatCurry.Annotated.Types.AExpr FlatCurry.Types.TypeExpr)
solution-complete:
 operation might suspend on free variables
terminating:
 possibly non-terminating
totally-defined:
 possibly non-reducible on same data term