CurryInfo: nonstrictunif-optimize-3.0.0 / NonStrictOpt.optimizeNonstrictEquality

definition:
 
optimizeNonstrictEquality :: [FuncDecl] -> Prog -> ([QName],Int,Int,Prog)
optimizeNonstrictEquality allfuns (Prog mod imps ts funs ops) =
  let (cycfuns,nsus,lnsus,optfs) =
          unzip4 (map (optimizeFun (indirectlyDependent allfuns)
                                   (analyseRightLinearity allfuns)) funs)
  in (catMaybes cycfuns, sum nsus, sum lnsus, Prog mod imps ts optfs ops)
demand:
 argument 2
deterministic:
 deterministic operation
documentation:
 
---------------------------------------------------------------------------
Replace "=:<=" by "=:<<=" if the left argument is a linear term with
linear functions.
The first argument is the list of all functions occuring in the program,
the second argument is the current module to be optimized.
The result is a tuple containing the number of "=:<=" occurring in the
module, the number of the optimized occurrences, and the optimized module.
failfree:
 <FAILING>
indeterministic:
 referentially transparent operation
infix:
 no fixity defined
iotype:
 {(_,{Prog}) |-> {(,,,)}}
name:
 optimizeNonstrictEquality
precedence:
 no precedence defined
result-values:
 {(,,,)}
signature:
 [FlatCurry.Types.FuncDecl] -> FlatCurry.Types.Prog
-> ([(String, String)], Prelude.Int, Prelude.Int, FlatCurry.Types.Prog)
solution-complete:
 operation might suspend on free variables
terminating:
 possibly non-terminating
totally-defined:
 possibly non-reducible on same data term