This package contains libraries to deal with FlatCurry programs. FlatCurry is an intermediate language to represent Curry programs where a lot of syntactic sugar has been eliminated. In particular, operations defined by general rules with local declarations and pattern matching are represented in FlatCurry by a single rule containing case expressions and disjunctions in its right-hand side. The precise structure of FlatCurry is defined in the module
Note that definition of types introduced by
newtype declarations are still present in FlatCurry. Although a
newtype declaration can be considered as syntactic sugar for a type synonym, a
newtype declaration is important for typing reasons, i.e., a
newtype is different from a type synonym. Thus, if one wants to translate FlatCurry programs into typed target languages (e.g., Haskell), the information about a
newtype might be relevant. However, if the target language is untyped, every use of a
newtype can be eliminated by dropping the
newtype constructors in the FlatCurry program. This can be done by operations provided by the module
Currently, this package contains the following modules:
FlatCurry.Compact: This module contains operations to reduce the size of FlatCurry programs by combining the main module and all imports into a single program that contains only the operations directly or indirectly called from a set of main operations.
FlatCurry.ElimNewtype: This module contains operations to eliminate definitions and uses of
newtype in a FlatCurry program.
FlatCurry.Files: This module defines operations to read and write FlatCurry programs.
FlatCurry.FlexRigid: provides an operation to compute the rigid/flex status of a FlatCurry expression (typically, the right-hand side of a rule).
FlatCurry.Goodies: This library provides selector operations, test and update operations as well as some useful auxiliary operations for FlatCurry data terms.
FlatCurry.Normalize: This module contains operations to transform FlatCurry entities into some normalized form so that they can be easier compared for equivalence.
FlatCurry.Pretty: This library provides pretty-printers for FlatCurry modules and all substructures (e.g., expressions).
FlatCurry.Read: This library defines operations to read FlatCurry programs or interfaces together with all its imported modules in the current load path.
FlatCurry.Show: This library contains operations to transform FlatCurry programs into string representations, either in a FlatCurry format or in a Curry-like syntax.
FlatCurry.Types: This module defines the data types to represent FlatCurry programs in Curry.
FlatCurry.XML: This module contains operations to convert FlatCurry programs into corresponding XML expressions and vice versa. This can be used to store Curry programs in a way independent of a Curry system or to use a Curry system, like PAKCS, as back end by other functional logic programming systems.