definition: |
simpleIteration :: Eq a => (t -> [(QName,a)] -> a) -> (t -> QName) -> ([(t,[QName])],[(t,[QName])]) -> ProgInfo a -> ProgInfo a -> ProgInfo a simpleIteration analysis nameOf declsWithDeps importInfos currvals = let completeProgInfo = combineProgInfo currvals importInfos newvals = map2 (\ (decl,calls) -> (nameOf decl, analysis decl (map (\qn -> (qn,maybe (lookupError "simpleIteration" qn) id -- information must known! (lookupProgInfo qn completeProgInfo))) calls))) declsWithDeps newproginfo = lists2ProgInfo newvals in if equalProgInfo currvals newproginfo then currvals else simpleIteration analysis nameOf declsWithDeps importInfos newproginfo |
demand: |
arguments 4 6 |
deterministic: |
deterministic operation |
documentation: |
----------------------------------------------------------------------- --- Fixpoint iteration to compute analysis information. The arguments are: --- * analysis operation --- * operation to get name of a declaration --- * list of public and private declarations together with their direct deps --- * ProgInfo for imported entities --- * current ProgInfo --- Result: fixpoint ProgInfo |
failfree: |
(_, _, _, _, _, _) |
indeterministic: |
referentially transparent operation |
infix: |
no fixity defined |
iotype: |
{(_,_,_,_,_,_) |-> _} |
name: |
simpleIteration |
precedence: |
no precedence defined |
result-values: |
_ |
signature: |
Prelude.Eq b => (a -> [((String, String), b)] -> b) -> (a -> (String, String)) -> ([(a, [(String, String)])], [(a, [(String, String)])]) -> Analysis.ProgInfo.ProgInfo b -> Analysis.ProgInfo.ProgInfo b -> Analysis.ProgInfo.ProgInfo b |
solution-complete: |
operation might suspend on free variables |
terminating: |
possibly non-terminating |
totally-defined: |
possibly non-reducible on same data term |