Table of Contents

A Selection of Papers related to Curry

Note: this is only a selection and, thus, always incomplete!

Surveys

Functional Logic Programming: From Theory to Curry (Programming Logics - Essays in Memory of Harald Ganzinger)
This papers surveys general features of functional logic languages, and discusses the design, implementation, extensions, and applications of Curry.

Functional Logic Programming (CACM 2010)
This article reviews the main ideas of functional logic programming and Curry.

Programming with Narrowing: a Tutorial (JSC 2010)
This paper surveys the use of narrowing, i.e., the operational principle of Curry, from a programmer viewpoint by means of examples.

Multi-paradigm Declarative Languages (ICLP 2007)
This papers surveys general features of functional logic languages and discusses the design of Curry.

Evaluation Strategies for Functional Logic Programming (JSC 2005)
This paper contains a survey on evaluation strategies and classes of functional logic programs.

The Integration of Functions into Logic Programming: From Theory to Practice (JLP 1994)
This papers surveys the early developments in the operational principles and implementations of integrated functional logic languages.

Language Features and Semantics

Free Theorems for Functional Logic Programs (PLPV 2010)
An example driven investigation of the restrictions of free theorems in Curry.

Overlapping Rules and Logic Variables in Functional Logic Programs (ICLP 2006)
This papers shows the equivalence of logic variables and nondeterministic operations in functional logic programs so that a kernel language need only to implement one of these features. This result is the basis of the KiCS implementation of Curry.

Operational Semantics for Declarative Multi-Paradigm Languages (JSC 2005)
This paper describes an operational semantics covering most aspects of Curry, like laziness, sharing, concurrency, non-determinism etc.

Controlling Search in Declarative Programs (PLILP/ALP'98)
This paper describes the idea and the use of the encapsulated search features of Curry.

Optimal Non-Deterministic Functional Logic Computations (ALP'97)
This paper motivates the use of non-deterministic functions in Curry and proposes an optimal evaluation strategy.

A Unified Computation Model for Functional and Logic Programming (POPL'97)
This paper contains the first detailed description of the operational model of Curry.

A Unified Computation Model for Declarative Programming (APPIA-GULP-PRODE'97)
This paper contains an updated and slightly modified introduction into the computation model of Curry.

Curry: A Truly Functional Logic Language (ILPS'95 Workshop on Vision for the Future of Logic Programming)
This paper sketches the very first ideas of the possible features of Curry. It is outdated and only included to track the history of Curry.

Implementations

A New Functional-Logic Compiler for Curry: Sprite (LOPSTR 2016)
This paper describes a new native code compiler for Curry which implements a fair evaluation of non-deterministic branches in a computation.

Implementing Equational Constraints in a Functional Language (PADL 2013)
This paper describes the implementation of equational constraints and functional patterns in KiCS2.

Search Strategies for Functional Logic Programming (ATPS 2012)
This paper describes the features of KiCS2 for encapsulated search and the implementation of various search strategies and compares their efficiency by some benchmarks.

KiCS2: A New Compiler from Curry to Haskell (WFLP 2011)
This paper describes Curry implementation KiCS2 which is based on the translation of Curry programs into Haskell programs. This implementation supports various search strategies. The benchmarks show that it can compete with or outperform other existing implementations of Curry.

An Implementation of Narrowing Strategies (PPDP 2001)
This paper describes an implementation of the kernel of Curry by translating functional logic programs into imperative (Java) programs without an intermediate abstract machine. A central idea of this approach is the explicit representation and processing of narrowing computations as data objects.

Compiling Multi-Paradigm Declarative Programs into Prolog (FroCoS 2000)
This paper describes a method to compile Curry programs into Prolog programs. This compiler is the central part of the PAKCS programming environment for Curry.

An Abstract Machine for Curry and its Concurrent Implementation in Java (Journal of Functional and Logic Programming, 1999)
This paper describes an implementation of Curry in Java where the concurrent and non-deterministic features of Curry are implemented with Java threads.

An Efficient Abstract Machine for Curry (ATPS'99)
This paper describes an abstract machine for the implementation of Curry. The abstract machine is an extension of a stack-based graph reduction machine and is implemented in C.

Implementing Encapsulated Search for a Lazy Functional Logic Language (FLOPS'99)
This paper describes an abstract machine for the implementation of Curry and its features for encapsulating search. This is the basis of a Curry implementation which can be found here.

UPV-Curry: An Incremental Curry Interpreter (SOFSEM'99)
This paper describes the ideas of the Curry interpreter developed at the Technical University of Valencia. An implementation is available here.

Incremental Needed Narrowing (IDL'99)
This paper contains the correctness proof of the incremental narrowing algorithm described in the previous paper.

Tools

CurryCheck: Checking Properties of Curry Programs (LOPSTR 2016)
This paper the tool CurryCheck to test properties contained in Curry programs.

Lazy and Faithful Assertions for Functional Logic Programs (WFLP 2010)
This paper proposes a new form of assertions that can be used in Curry programs.

EasyCheck — Test Data for Free (FLOPS 2008)
A QuickCheck-like testing tool that employs narrowing to generate test cases.

<bibtex> @inproceedings{FischerKuchen07PPDP, author = {Sebastian Fischer and Herbert Kuchen}, title = {Systematic generation of glass-box test cases for functional logic programs}, booktitle = {PPDP '07: Proceedings of the 9th ACM SIGPLAN international symposium on Principles and practice of declarative programming}, year = {2007}, isbn = {978-1-59593-769-8}, pages = {63–74}, location = {Wroclaw, Poland}, doi = {http://doi.acm.org/10.1145/1273920.1273930}, publisher = {ACM Press}, address = {New York, NY, USA}, } </bibtex>

Reporting Failures in Functional Logic Computations (ENTCS 177)
This paper describes the implementation of failure reporting in the Curry implementation PAKCS.

Observing Functional Logic Computations (PADL 2004)
This paper describes the tool COOSy to observe the results of computations in a Curry program. COOSy is integrated in the Curry implementation PAKCS.

Program Transformation

From Boolean Equalities to Constraints (LOPSTR 2015)
This paper describes an automatic method to transform Boolean equalities into constraint equalities, if possible. With this transformation tool, it is sufficient to use only Boolean equalities in Curry programs, since operationally more efficient constraints are automatically inserted.

A Practical Partial Evaluator for a Multi-Paradigm Declarative Language (FLOPS 2001)
This paper describes an approach to the partial evaluation of arbitrary Curry programs. In particular, it addresses the partial evaluation of all standard features like external functions, higher-order functions, concurrency etc. The partial evaluator based on these ideas is implemented in Curry itself and is available here.

Using an Abstract Representation to Specialize Functional Logic Programs (LPAR'2000)
This paper describes a new approach to the partial evaluation of Curry programs. The partial evaluator based on these ideas is implemented in Curry itself and is available here.

Improving Functional Logic Programs by Difference-Lists (ASIAN 2000)
This paper describes an approach to optimize Curry programs by a stepwise transformation based on difference lists as used in logic programming.

Specialization of Inductively Sequential Functional Logic Programs (ICFP'99)
This paper describes a partial evaluator for the narrowing-based subset of Curry and discuss its advantages w.r.t. lazy narrowing strategies.

A Partial Evaluation Framework for Curry Programs (LPAR'99)
This paper describes a partial evaluator for a subset of Curry. An implementation is available here.

Analysis

A Modular and Generic Analysis Server System for Functional Logic Programs (PEPM 2014)
This paper presents the ideas and implementation of the program analysis framework CASS which is part of the PAKCS and KiCS2 distributions.

Call Pattern Analysis for Functional Logic Programs (PPDP 2008)
This paper presents a new program analysis framework to approximate call patterns and their results in functional logic programs.

CurryBrowser: A Generic Analysis Environment for Curry Programs (WLPE 2006)
This paper presents the ideas of CurryBrowser, a generic analysis environment for Curry programs that is integrated into the PAKCS environment.

Nondeterminism Analysis of Functional Logic Programs (ICLP 2005)
This paper presents a method to analyse the non-determinism behavior of Curry programs based on a type inferences for nonstandard types.

Type-based Nondeterminism Checking in Functional Logic Programs (PPDP 2000)
This paper describes a method to analyse the non-determinism behavior of Curry programs.

Programming Environments

A Generic Analysis Environment for Declarative Programs (WCFLP 2005)
This paper presents CurryBrowser, a generic analysis environment for Curry programs.

CurryDoc: A Documentation Tool for Declarative Programs (WFLP 2002)
This paper presents CurryDoc, a tool for the automatic generation of documentation manuals in HTML format from Curry programs.

An Integrated Development Environment for Declarative Multi-Paradigm Programming (WLPE 2001)
This paper describes CIDER, a graphical programming and development environment for Curry and other declarative programming languages. CIDER is intended as a platform to integrate various tools for analyzing and debugging Curry programs.

A Graphical Development Environment for Functional Logic Languages (WFLP 2000)
This paper describes IDE, an integrated development environment for the functional logic languages Curry and Toy.

Applications

A Typeful Integration of SQL into Curry (WFLP 2016)
This paper describes the integration of SQL queries in Curry programs in a type-safe manner, based on a logical description of the relational database as an entity-relationship (ER) model.

An ER-based Framework for Declarative Web Programming (TPLP 2014)
This paper describes a framework to generate web applications from an entity-relationship (ER) model of the underlying data. The generated implementation contains operations to create and manipulate entities of the data model, supports authentication, authorization, session handling, and the composition of individual operations to user processes. Furthermore, the implementation ensures the integrity of the database after update operations.

Declarative Programming of User Interfaces (PADL 2009)
This paper shows how the features of Curry can be exploited to define user interfaces in a declarative manner so that graphical user interfaces for desktop applications as well as web user interfaces can be obtained from the same user interface specification.

Putting Declarative Programming into the Web: Translating Curry to JavaScript (PPDP 2007)
This paper presents a technique to compile Curry programs into JavaScript programs in order to check specific input conditions in the web browser, where the programmer can implement these conditions in Curry. The compiler is integrated as in the PAKCS programming environment.

Type-Oriented Construction of Web User Interfaces (PPDP 2006)
This paper proposes a new technique for the high-level construction of type-safe web-oriented user interfaces in Curry. It is integrated as a library ( WUI) in the PAKCS programming environment.

Functional Logic Design Patterns (FLOPS 2002)
This paper introduces a handful of software design patterns that are useful for programming in Curry.

Programming Autonomous Robots in Curry (WFLP 2002)
This paper resent a framework to program autonomous robots in Curry.

High-Level Server Side Web Scripting in Curry (PADL 2001)
This paper describes the design of a library for programming dynamic weg pages in Curry based on standard CGI features. Due to the use of the functional and logic features of Curry, details and frequent errors in standard CGI programming are avoided by an abstraction layer which also supports event handlers, state variables and interaction sequences.

A Functional Logic Programming Approach to Graphical User Interfaces (PADL 2000)
This paper describes the design of a library for GUI programming in Curry. The functional features are exploited to define the layout and to define new graphical abstractions, and the logic features are used to specify the logical dependencies of an interface.

A Functional Logic Perspective on Parsing (in Springer LNCS 1722)
This paper describes the design of a library for building parsers where the functional and logic features are exploited. This library is available in the PAKCS distribution of Curry.

Demand-driven Search in Functional Logic Programs
This paper shows the advantages of Curry to implement demand-driven search strategies. Moreover, it demonstrates these advantages by an application from the area of music composition.

Teaching Functional and Logic Programming with a Single Computation Model (PLILP'97)
This paper describes how to use Curry to teach functional and logic programming paradigms in a single course based on Curry's computation model.

Extensions

Default Rules for Curry (TPLP 2017)
This paper proposes a new concept of default rules for Curry that simplifies some computation tasks and is conform with the core properties of Curry. Default rules are integrated with a preprocessor in the Curry implementations PAKCS and KiCS2.

Eliminating Irrelevant Non-determinism in Functional Logic Programs (PADL 2017)
This paper proposes determinism annoations for operations defined in Curry. A determinism annotation avoids the recomputation of identical results and, thus, improve the operational behavior of Curry programs without destroying its completeness. Determinism annotations are integrated with a preprocessor in the Curry implementations PAKCS and KiCS2.

CHR(Curry): Interpretation and Compilation of Constraint Handling Rules in Curry (PADL 2015)
This paper proposes an integration of Constraint Handling Rules (CHR), a rule-based language to specify application-oriented constraint solvers, into Curry. This integration provides a convenient way to specify and use flexible constraint systems in applications implemented in Curry. The implementation is available as a library in PAKCS.

Set Functions for Functional Logic Programming (PPDP 2009)
This paper proposes set functions as a new feature to encapsulate nondeterministic computations in Curry. In contrast to previous approaches, the result of set functions is independent of their evaluation order. Thus, they can be considered as a declarative approach to encapsulate search.

Adding Constraint Handling Rules to Curry (WLP 2006)
This paper proposes an integration of Constraint Handling Rules (CHR), a rule-based language to specify application-oriented constraint solvers, into Curry. This integration provides a convenient way to specify and use flexible constraint systems in applications implemented in Curry. A prototypical implementation is available here.

Declarative Programming with Function Patterns (LOPSTR 2005)
This paper proposes an extension of Curry that allows the definition of operations with patterns containing other defined operation symbols. Such “function patterns” allow a direct representation of specifications as declarative programs, provide better abstractions of patterns as first-class objects, and support the high-level programming of queries and transformation of complex structures.

An Object-Oriented Extension of the Declarative Multi-Paradigm Language Curry (IFL 2000)
This paper describes ObjectCurry, an extension of Curry to support a classical object-oriented programming style. ObjectCurry supports the definition of templates and the dynamic creation of objects, i.e., instances of templates. Objects owns a state and react when they receive a message. Template definitions can be reused by inheritance. Although ObjectCurry has a specific type system that combines parametric polymorphism with subtype polymorphism, each ObjectCurry program can be translated into a standard Curry program so that ObjectCurry can be implemented as a preprocessor for a standard Curry system.

Adding Linear Constraints over Real Numbers to Curry (FLPOPS 2001)
This paper describes an approach to extend Curry by the possibility to specify linear constraints over real numbers in Curry that are processed by a specific constraint solving algorithm.

Distributed Programming in a Multi-Paradigm Declarative Language (PPDP'99)
This paper describes an extension of Curry to support distributed applications where a dynamically changing number of different program units must be coordinated.