Here is the collection of libraries contained in the distribution of PAKCS. Most of these libraries have been implemented during the development of larger Curry applications. If you have suggestions for changes/improvements or if you want to contribute your own library, please contact Michael Hanus.
This module contains a collection of functions for obtaining lists of solutions to constraints. These operations are useful to encapsulate non-deterministic operations between I/O actions in order to connects the worlds of logic and functional programming and to avoid non-determinism failures on the I/O level.
Library for formatted output on terminals
This module defines the datatype and operations for the Curry module tester "currytest".
Library for finite domain constraint solving.
Library for finite domain constraint solving.
The general structure of a specification of an FD problem is as follows:
Library for constraint programming with arithmetic constraints over reals.
Library for reading/writing files in CSV format. Files in CSV (comma separated values) format can be imported and exported by most spreadsheed and database applications.
Library with some useful functions on characters.
A collection of common non-deterministic and/or combinatorial operations. Many operations are intended to operate on sets. The representation of these sets is not hidden; rather sets are represented as lists. Ideally these lists contains no duplicate elements and the order of their elements cannot be observed. In practice, these conditions are not enforced.
This library contains some useful operation for debugging programs.
Library for accessing the directory structure of the underlying operating system.
This module contains functions to obtain information concerning the current distribution of the Curry implementation, e.g., compiler version, load paths, front end.
Library with some useful operations for the
A combination of Error and state monad like
A collection of useful operations when dealing with files.
This library is a direct port of the Haskell library System.FilePath of Neil Mitchell.
Library with some operations for encapsulating search.
Note that some of these operations are not fully declarative,
i.e., the results depend on the order of evaluation and program rules.
There are newer and better approaches the encpasulate search,
in particular, set functions (see module
which should be used.
A collection of operations on floating point numbers.
The library provides some operations to format values of basic
data types with arbitrary flags similarly to the
statement of C.
This module provides some utility functions for function application.
This module provides some utility functions for inverting functions.
This Module is a modified version of the Module System.Console.GetOpt by Sven Panne from the ghc-base package it has been adapted for Curry by Bjoern Peemoeller
Library for handling global entities. A global entity has a name declared in the program. Its value can be accessed and modified by IO actions. Furthermore, global entities can be declared as persistent so that their values are stored across different program executions.
Library for handling global variables. A global variable has a name declared in the program. Its value (a data term possibly containing free variables) can be accessed and modified by IO actions.
Library for IO operations like reading and writing files that are not already contained in the prelude.
Library with some useful extensions to the IO monad.
A collection of common operations on integer numbers.
Most operations make no assumption on the precision of integers.
is necessarily an exception.
Library with some useful operations on lists.
Library with some useful functions on the
Library to support network programming with sockets that are addressed
by symbolic names. In contrast to raw sockets (see library
Socket), this library uses the Curry Port Name Server
to provide sockets that are addressed by symbolic names
rather than numbers.
Library defining natural numbers in Peano representation and some operations on this representation.
Library with functional logic parser combinators.
Library to access profile data of the Prolog system
Library for distributed programming with ports. This paper contains a description of the basic ideas behind this library.
The standard prelude of Curry. All top-level functions defined in this module are always available in any Curry program.
This library provides pretty printing combinators.
The interface is that of
Daan Leijen's library
linear-time, bounded implementation
by Olaf Chitil.
Note that the implementation of
is not linear-time bounded
Support of ANSI escape codes for formatting and colorisation of documents
in text terminals (see https://en.wikipedia.org/wiki/ANSIescapecode)
Preliminary library to support profiling.
A library to read and update files containing properties in the usual
equational syntax, i.e., a property is defined by a line of the form
starts with a letter.
All other lines (e.g., blank lines or lines starting with
considered as comment lines and are ignored.
Library with some functions for reading special tokens.
Library with some functions for reading and converting numeric tokens.
Library for converting ground terms to strings and vice versa.
A library to defined and match regular expressions. This library is used to translated integrated code in the form of POSIX extended regular expressions into Curry programs.
This module contains an implementation of set functions. The general idea of set functions is described in:
This library provides a type and combinators for show functions using functional lists.
Library to support network programming with sockets.
In standard applications, the server side uses the operations
socketAccept to provide some service
on a socket, and the client side uses the operation
connectToSocket to request a service.
This library provides an implementation of the state monad.
Library to access parts of the system environment.
This library defines some auxiliaries to check contracts based on specifications or pre- and postconditions provided in a Curry module. The interface might probably change with the further development of the contract implementation.
EasyCheck is a library for automated, property-based testing of Curry programs. The ideas behind EasyCheck are described in this paper. The CurryCheck tool automatically executes tests defined with this library. CurryCheck supports the definition of unit tests (also for I/O operations) and property tests parameterized over some arguments. CurryCheck is described in more detail in this paper.
EasyCheck is a library for automated, property-based testing of Curry programs. The ideas behind EasyCheck are described in this paper. This module implements the operations to actually execute the tests.
This module defines the interface of properties that can be checked with the CurryCheck tool, an automatic property-based test tool based on the EasyCheck library. The ideas behind EasyCheck are described in this paper. CurryCheck automatically tests properties defined with this library. CurryCheck supports the definition of unit tests (also for I/O operations) and property tests parameterized over some arguments. CurryCheck is described in more detail in this paper.
Library for handling date and time information.
Library containing unsafe operations. These operations should be carefully used (e.g., for testing or debugging). These operations should not be used in application programs!
Implementation of Arrays with Braun Trees. Conceptually, Braun trees are always infinite. Consequently, there is no test on emptiness.
An implementation of double-ended queues supporting access at both ends in constant amortized time.
A finite map is an efficient purely functional data structure
to store a mapping from keys to values.
In order to store the mapping efficiently, an irreflexive(!) order predicate
has to be given, i.e., the order predicate
should not satisfy
(le x x)
for some key
Library for pseudo-random number generation in Curry.
Library with an implementation of red-black trees:
Serves as the base for both TableRBT and SetRBT
All the operations on trees are generic, i.e., one has to provide
two explicit order predicates ("
lessThan" and "
Computing strongly connected components
This library defines a representation of a search space as a tree and various search strategies on this tree. This module implements strong encapsulation as discussed in the JFLP'04 paper.
This library implements some operations to generate search trees for various data types.
Implements additional traversals on search trees.
Library with an implementation of sets as red-black trees.
A collection of useful functions for sorting and comparing characters, strings, and lists.
Library with an implementation of tables as red-black trees:
A table is a finite mapping from keys to values.
All the operations on tables are generic, i.e., one has to provide
an explicit order predicate ("
cmp" below) on elements.
Each inner node in the red-black tree contains a key-value association.
Library to support lightweight generic traversals through tree-structured data. See here for a description of the library.
This library defines a data structure for sequence of values.
It is used in search trees (module
SearchTree) as well as in
set functions (module
Using sequence of values (rather than standard lists of values)
is necessary to get the behavior of set functions
w.r.t. finite failures right, as described in the paper
|Operation is deterministic, i.e., defined by exclusive rules and depend only on deterministic operations|
|Operation might be non-deterministic, i.e., it is defined by overlapping rules or depend on non-deterministic operations|