CurryInfo: residuation-analysis-3.0.0

categories:
Analysis
dependencies:
[Dependency "base" [[VGte "3.0.0",VLt "4.0.0"]],Dependency "cass" [[VGte "3.0.0",VLt "5.0.0"]],Dependency "cass-analysis" [[VGte "3.0.0",VLt "5.0.0"]],Dependency "csv" [[VGte "3.0.0",VLt "4.0.0"]],Dependency "currypath" [[VGte "3.0.0",VLt "4.0.0"]],Dependency "directory" [[VGte "3.0.0",VLt "4.0.0"]],Dependency "filepath" [[VGte "3.0.0",VLt "4.0.0"]],Dependency "flatcurry" [[VGte "3.0.0",VLt "5.0.0"]],Dependency "process" [[VGte "3.0.0",VLt "4.0.0"]]]
documentation:
An analyzer of the residuation behaviour of Curry programs
==========================================================

This package contains a tool to analyze the residuation
behavior of Curry programs. The residuation behavior
is abstracted in the form

* if arguments i1,i2,..,in are ground values, then the
  function does not residuate
* the function might residuate or evaluates to a non-ground value
  independent of the groundness of the arguments

The tool can simply show these analysis results or store the
results as a Curry term of type

    [(String,[Int])]

Thus, it is a list of pairs consisting of the
qualified function name and a list of argument indices
(numbered from 1).
The indices are either the required ground arguments or
`[0]` if the function might residuate.
This information can be used by Curry compiler
(e.g., [PAKCS](https://www.curry-lang.org/pakcs/))
to optimize the compilation of non-residuating operations.

The tool has also options to show all possibly residuating operations
of a module or to print some statistics in CSV format (see option
`--help`).

Documentation
-------------

The ideas about this analysis and its application are described
in this paper:

> M. Hanus: Improving Residuation in Declarative Programs
>
> Proc. of the 21st International Symposium on
> Practical Aspects of Declarative Languages (PADL 2019),
> Springer LNCS 11372, pp. 82-97, 2019
> ([Online](https://doi.org/10.1007/978-3-030-05998-9_6))
exportedmodules:
AnalyzeResiduation ToolOptions
modules:
AnalyzeResiduation ToolOptions
version:
3.0.0