Implementations of Curry

Since the development of Curry is an international initiative by various research groups, several implementations are available and/or under development. Some of them are listed below.

The Münster Curry Compiler

The Münster Curry compiler is a mature native code compiler for Curry which conforms to the Curry report except for committed choice which is not supported. Since release 0.9.5 there are no longer any restrictions to the encapsulated search. Supported extension to the Curry language include disequality constraints, recursive pattern bindings, and IO exceptions. A distinctive feature of the Münster Curry compiler is the integration of a declarative debugger of wrong answers. An interactive Curry environment and a make-like build tool for Curry are included in the distribution. Besides the Gnu C compiler no other software is needed to compile and run Curry programs with the Münster Curry compiler. Papers describing this implementation can be found here.
Contact: Wolfgang Lux (wlux@uni-muenster.de)

PAKCS: the Portland Aachen Kiel Curry System

PAKCS is a prototypical implementation of Curry jointly developed by the Portland State University, the Aachen University of Technology, and the University of Kiel. It has a common front-end and three different back-ends described below:

There exists also an interactive WWW interface to some of these components so that you can try smaller programs without downloading the complete system.
Contact: Michael Hanus ( mh@informatik.uni-kiel.de)

Curry2Prolog

The Curry2Prolog compiler system is an interactive system to develop Curry programs. It has a simple user interface and some useful debugging features. Moreover, it also contains constraint solvers for arithmetic and finite domain constraints, an implementation of ports for concurrent and distributed applications (which is described here), a library for implementing graphical user interfaces (which is described here), a library for programming dynamic web pages (which is described here), among other libraries for application programming (e.g., XML processing, meta-programming, sets, system access). There exists also an interactive WWW interface to this compiler.
Contact: Michael Hanus ( mh@informatik.uni-kiel.de)

FLVM

The FLVM is a virtual machine for functional logic computations. Curry programs are compiled into FLVM instructions that are executed by the FLVM interpreter that is implemented in Java. A feature of the FLVM is the implementation of a fair (i.e., operationally complete) execution of nondeterministic computations and sharing of deterministic computations over nondeterministic branches.
Contact: Sergio Antoy (antoy@cs.pdx.edu)

Sloth

The Sloth system is a compiler which translates Curry programs into Prolog programs. It is under development at the Technical University of Madrid. The Sloth system has an interactive interface to load programs, evaluate expressions etc.
Contact: Julio Mariño ( julio.marino@fi.upm.es)

Zinc

The Zinc Compiler is an experimental compiler for an extended version of Curry and based on the Münster Curry Compiler (MCC). Type classes are the most notably extension at the moment. The Zinc project is being developed at the University of Oviedo by Diego Berrueta.
Contact: Diego Berrueta (diego AT berrueta DOT net)


Older Implementations

Below are some older implementations of Curry that are no longer actively maintained.

Curry2Java
Curry2Java is another back-end for PAKCS which translates Curry programs into Java programs. It uses Java threads to implement the concurrent and non-deterministic features of Curry. A paper describing this implementation can be found here.
Contact: Michael Hanus ( mh@informatik.uni-kiel.de)

Narrowminder
Narrowminder is an implementation environment (back end) for functional logic programming and related languages. It can compile Curry programs into Java code and implements a complete and efficient implementation of needed narrowing (breadth-first search). It can be also used as a back end for related languages since it is based on a language-independent intermediate XML representation of FlatCurry programs.
Contact: Sergio Antoy (antoy@cs.pdx.edu)

TasteCurry
The TasteCurry interpreter is a slow but fairly complete implementation of Curry. It is an interpreter written in Prolog and does not implement sharing. Thus, it is only intended to test smaller Curry programs.
Contact: Michael Hanus ( mh@informatik.uni-kiel.de)

UPV-Curry
UPV-Curry is a Curry interpreter developed by the ELP group at the Technical University of Valencia (UPV). It is implemented in Prolog and has an interactive interface to load programs, evaluate expressions etc. There exists also a larger application implemented with this interpreter which simulates the ecological behavior of the Segura river's basin.
Contact: María Alpuente ( alpuente@dsic.upv.es)

CIDER
CIDER is a graphical programming and development environment for Curry. CIDER is intended as a platform to integrate various tools for analyzing and debugging Curry programs. CIDER is completely implemented in Curry. Although the graphical debugger contains an interpreter for executing Curry programs, it is only intended for visualizing the execution of smaller programs and not for executing large programs.
Contact: Michael Hanus ( mh@informatik.uni-kiel.de)


Back to Homepage of Curry
Michael Hanus