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 |