by Michael Hanus, Kai-Oliver Prott
Proc. of the 27th International Symposium on Principles and Practice of Declarative Programming (PPDP 2025), ACM Press, 2025
Functional logic programming languages, such as Curry, integrate features of functional and logic paradigms, in particular, demand-driven deterministic evaluation from functional programming with non-deterministic search from logic programming. Though useful for programming, this combination can lead to unintended results and subtle bugs. To support programming with this powerful computation model, this paper proposes a method to detect unintended non-determinism at compile time. For this purpose, we propose determinism types to approximate the determinism behavior of functions and expressions. In contrast to standard types in strongly typed languages, determinism types do not restrict the set of admissible programs but support the programmer and programming tools in reasoning about functional logic programs, e.g., to enforce determinism in top-level I/O operations. We present the motivation behind this approach, discuss core concepts of functional logic programming and Curry, and outline methods to check for determinism through type-based analysis.
Preprint (PDF) BibTeX-Entry