CurryInfo: failfree-4.0.0 / Main.renameLetVars

definition: Info
 
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: Info
 no demanded arguments
deterministic: Info
 deterministic operation
documentation: Info
 
Rename let-bound variables in a let expression.
indeterministic: Info
 referentially transparent operation
infix: Info
 no fixity defined
name: Info
 renameLetVars
precedence: Info
 no precedence defined
result-values: Info
 _
signature: Info
 [((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: Info
 operation might suspend on free variables
terminating: Info
 possibly non-terminating
totally-defined: Info
 possibly non-reducible on same data term