We have proposed a new program analysis for functional logic languages that identifies functions and program parts that might raise nondeterministic computations during their evaluation. By the results obtained from such an analysis, the programmer will be able to change the program to make it more robust. For instance, to avoid splitting computations she might remove nondeterminism completely if it was not necessary or a result of a programming error. Otherwise, she can encapsulate the affected program parts, if the nondeterminism is necessary for computing the result. This will avoid runtime errors in programs that use I/O actions (which is the case for almost every larger program) and thus increase program stability. Additionally, compilers can exploit the analysis results to optimize the code for deterministically reducible parts of a program.
We have presented the typing rules and some examples for the functional logic language Curry, but the analysis should be easily adaptable to other functional logic languages (or just logic languages).
The work presented in this paper is still in progress. Any comments, ideas and discussions are very welcome and appreciated by the authors.