CurryInfo: nonstrictunif-optimize-3.0.0 / NonStrictOpt.optimizeFun

definition:
optimizeFun :: [(QName,[QName])] -> [(QName,Bool)] -> FuncDecl
               -> (Maybe QName,Int,Int,FuncDecl)
optimizeFun depinfo lininfo (Func qn ar vis ty (Rule vs e)) =
  let (cyc,nsu,lnsu,opte) = optimizeExp (isDependent depinfo qn,lininfo) e
  in (if cyc then Just qn else Nothing, nsu, lnsu,
      Func qn ar vis ty (Rule vs opte))
optimizeFun _ _ (Func qn ar vis ty (External e)) =
  (Nothing,0,0,Func qn ar vis ty (External e))
demand:
argument 3
deterministic:
deterministic operation
documentation:
-- Optimize a single function definition.
-- The first argument is the list of all functions together with a flag
-- whether they are defined by right-linear rules and functions.
-- The result is (n,l,fd) where n is the number of non-strict equalities
-- in the function definition, l is the number of optimized linear
-- non-strict equalities, and fd is the optimized function definition.
failfree:
<FAILING>
indeterministic:
referentially transparent operation
infix:
no fixity defined
iotype:
{(_,_,{Func}) |-> {(,,,)}}
name:
optimizeFun
precedence:
no precedence defined
result-values:
{(,,,)}
signature:
[((String, String), [(String, String)])] -> [((String, String), Prelude.Bool)]
-> FlatCurry.Types.FuncDecl
-> (Prelude.Maybe (String, String), Prelude.Int, Prelude.Int, FlatCurry.Types.FuncDecl)
solution-complete:
operation might suspend on free variables
terminating:
possibly non-terminating
totally-defined:
possibly non-reducible on same data term