Table of Contents
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). Many tools for Curry are implemented in Curry and some of them are large applications of Curry. Since these tools are listed under the tools sections, the following list does not include them.
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.
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 is an application of Curry in 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.
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.
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
A graph language can be described with a graph grammar in a manner similar to a string grammar known from the theory of formal languages. Recently we have introduced the Haskell library graph parser combinators. Therewith, several graph parsers can be implemented quite conveniently.
Unfortunately, it is quite complicated to realize a straightforward and reasonably efficient translation of so-called hyperedge replacement grammars (a context-free graph grammar formalism) to graph parsers. Problems are mainly caused by heavy non-determinism. Therefore, we have reimplemented our library in Curry.
The Curry implementation provides two main benefits: Grammars can be translated to quite efficient parsers in a schematic way. Furthermore, parsers can be used as generators and for graph completion at the same time.
We exploit these nice properties in the domain of diagram editors. Here, graph grammars are used to define the syntax of visual languages and graph completion appears to be very beneficial for the realization of powerful content assist. We have connected our framework to the diagram editor generator DiaGen. More information about our graph parsers can be found at our project website.
Module and Study Program Management
This is a system to manage module descriptions and study programs for university curricula. The complete system is web-based, i.e., lecturers can describe their teaching units and collect them to study programs via standard web browsers. The system is in use at the University of Kiel and can be accessed here. The high-level libraries of Curry, e.g., for database programming, type-safe web programming, and web frameworks based on ER-models were quite helpful to construct this application. For further details contact Michael Hanus.
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 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.
Spicey: An ER-based Web Framework
Spicey is a framework to support the implementation of web-based systems in the multi-paradigm declarative language Curry. Spicey generates an initial implementation from an entity-relationship (ER) description 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 consistency of the database w.r.t. the data dependencies specified in the ER model, i.e., updates initiated by the user cannot lead to an inconsistent state of the database. Further details can be found in the Spicey web page.
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.
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.