Residuation analysis -------------------- This analysis checks whether a function does not residuate and yields, if it successfully evaluates to some value, a ground value provided that the function is called with some ground values as arguments. To bemore precise, the analysis associates to each function one of the following results: * `NoResiduateIf xs` (does not residuate if arguments `xs` are ground): If the operation is called where the arguments in the index list `xs` are ground values (where arguments are numbered from 1), then the evaluation does not residuate and yields a ground value. For instance, the operation const :: a -> b -> a const x _ = x has the residuation behavior `NoResiduateIf [1]`, and the list concatenation `++` has the residuation behavior `NoResiduateIf [1,2]`. * `MayResiduate` (possible residuation or non-ground result): The operation might residuate or yields a non-ground value, independent of the arguments. For instance, this is the case for the operations f x = x + ensureNotFree unknown g x = (x,y) where y free * `NoResInfo` (unknown residuation behavior): The residuation behavior of this function cannot be determined. This might occur when complex recursive `let`s are involved.