Applications of Curry

Since Curry amalgamates functional, logic, and concurrent programming paradigms, the intended applications areas of Curry cover the areas of languages belonging to these paradigms (see, for instance, real-world applications of functional programming, third party software and application links by SICS, or the practical application of Prolog conferences). Due to the new development of Curry, there are only a few applications implemented specifically in Curry which are listed below, but this list is still growing.
Address server
This is a system to manage addresses. It consists of a graphical user interface for the convenient insertion and modification of addresses and an address server to access addresses from Internet clients. To see some part of the functionality of the address server, you can see here the current list of subscribers of the Curry mailing list. The implementation uses the features for persistent predicates and the GUI library of Curry. For further details contact Michael Hanus.

Bibliographic database
This is a system to store, retrieve and convert bibliographic information oriented at documents in BibTeX format. In addition to pure BibTeX, entries also contain lists of keywords and signatures (which can be queried). The implementation has a graphical user interface for the convenient access, insertion, and modification of bibliographic entries. It is possible to convert entries or the complete database into various formats, including standard BibTeX or XML. The implementation uses various libraries including the GUI library of Curry. For further details contact Michael Hanus.

Chords, an application from the area of music composition
This system is able to generate appropriate chords for the accompaniment of a given melody. There is also a paper which sketches the implementation and describes the advantages of Curry to implement this application.

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. Currently, it consists of a program editor, various tools for analyzing properties of functions in Curry programs (types, overlapping definitions, complete definitions, dependencies etc), a graphical debugger, i.e., a visualization of the evaluation of expressions, and a tool for drawing dependency graphs. The implementation uses Curry's GUI library and the FlatCurry library for meta-programming in Curry. Furthermore, it provides a connection to the daVinci graph visualization tool and a meta-interpreter for executing FlatCurry programs in Curry. For further details contact Michael Hanus.

COOSy
COOSy is an implementation of a lightweight approach for debugging functional logic programs in Curry by observations. It consists of a library plus a viewing tool. Programmers can annotate their program with observation functions for data structures and functions which may both contain or be applied to logical variables. The parts of observed objects that are evaluated during the execution are recorded in a trace file and can be viewed by means of a pretty printer integrated in a graphical user interface. The tool covers all aspects of modern functional logic multiparadigm languages such as lazy evaluation, higher order functions, non-deterministic search, logical variables, concurrency and constraints. Further details are available in the COOSy web page.

CurryBrowser
CurryBrowser is a tool to browse through the modules and functions of a Curry application, show them in various formats, and analyze their properties. Moreover, it is constructed in a way so that new analyzers can be easily connected to CurryBrowser. A detailed description of the ideas behind this tool can be found in the paper " A Generic Analysis Environment for Declarative Programs". Currently, it consists of a program editor, various tools for analyzing properties of functions in Curry programs (types, overlapping definitions, complete definitions, dependencies etc), and tools for drawing dependency graphs. CurryBrowser is part of the PAKCS distribution and can be easily used inside the PAKCS environment.
The implementation uses Curry's GUI library and the FlatCurry library for meta-programming in Curry. For further details look into the manual of PAKCS or contact Michael Hanus.

CurryDoc: A Documentation Tool for Declarative Programs
CurryDoc is a tool for the automatic generation of documentation manuals in HTML format from programs written in Curry. The documentation is generated by combining comments in the source program with information extracted from the program. It extends other tools with a similar goal (e.g., javadoc) by the inclusion of information in the generated documents which has been computed by analyzing the structure and approximating the run-time behavior of the program. CurryDoc is completely implemented in Curry and is used to generate the documentation of the libraries included in PAKCS.

CurryWeb
CurryWeb is an open system to support web-based learning. Characteristic features of this system are openness (i.e., no strong distinction between instructors and students) and self-responsible use (e.g., every user is responsible for selecting the right material to obtain the desired knowledge). The system supports the selection of material by structuring all learning material hierarchically and as a hypergraph whose nodes and edges are marked with educational objectives and educational units, respectively. The complete system is implemented in Curry and exploits the various features of Curry, in particular, for HTML programming. There is also a paper describing the ideas of this system in more detail. For further details contact Michael Hanus.

Ecological simulation
This system simulates the ecological behavior of a river depending on sewage running into different parts of the river. The system together with an implementation of Curry is described in the following master thesis (in Spanish):

Santiago Escobar Román: Implementación de un lenguaje declarativo avanzado y su aplicación a la simulación del ecosistema de una cuenca hidrográfica
Facultad de Informática, Universidad Politécnica de Valencia, Spain, September 1998

Recipe database
This is a system to manage a database containing recipes (and references to recipes). It has a graphical user interface for the convenient access, insertion, and modification of recipes. Recipes will be automatically converted into HTML format for providing WWW access to the database and into LaTeX for formatting printing. The implementation uses the GUI library of Curry. For further details contact Michael Hanus.

SOL (Solution OnLine)
SOL is a web-based system to support practical assignments of courses, e.g., it is applied in computer science courses at the University of Kiel. SOL provides web-based functionality for lectures, tutors (who correct assignments), and students. Lectures can structure courses into units that contain various assignments, e.g., multiple/single choice tests, gap texts, programming tasks etc. Students can submit their solutions to a learning unit which will be judged by tutors. Students can form smaller learning groups to solve their tasks. Moreover, SOL contains a message system to exchange information between students, tutors, and lectures.
The complete system is implemented in Curry and exploits the various features of Curry, in particular, for database programming and HTML programming. An example installation can be found here For further details contact Michael Hanus.

Web Server Scripting
Several dynamic web pages have been implemented using Curry's HTML library which is based on standard CGI features but exploits the functional and logic features of Curry to support the convenient and high-level implementation of web services. There is also a paper which describes the ideas behind the design of this library. For further details contact Michael Hanus.

Wine manager
This is a system to manage a (private) wine cellar. It has a graphical user interface for the convenient access, insertion, and modification of wines (structured into categories). Wine lists can be converted into HTML and LaTeX format for printing or offering wines in the web. The implementation uses the GUI library of Curry. For further details contact Michael Hanus.


Back to Homepage of Curry
Michael Hanus