README.md 2.01 KB
Newer Older
1
# Curry Frontend
2

3
4
The Curry frontend parses source files (`.curry`), emits errors and
warnings, performs various checks and transformations and 
5
generates FlatCurry (`.fcy`, `.fint`) or AbstractCurry (`.acy`, `.uacy`) amonst other formats.
6

7
8
The project originated from a modified version of the
Münster-Curry-Compiler (MCC) for use as a frontend in PAKCS.
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
9

10
## Requirements
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
11

12
13
* `cabal-install`
* A recent version of the `curry-base` package, installed locally
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
14

15
## Building
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
16

17
To build the project, run
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
18

19
> cabal v1-build
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
20

21
## Running
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
22

23
To run the project, you can use
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
24

25
> cabal v1-run
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
26

27
Alternatively, you can launch the built executable manually from `dist/build/curry-frontend`.
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
28

29
## Usage
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
30

31
For a detailed overview of the available options, you can use:
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
32

33
> curry-frontend --help
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
34

35
### Available Formats
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
36

37
```
38
39
40
41
--flat  : Generate a FlatCurry (.fcy) and FlatInterface (.fint) file
--xml   : Generate a FlatXML (_flat.xml) file
--acy   : Generate a (type-inferred) AbstractCurry (.acy) file
--uacy  : Generate an untyped AbstractCurry (.uacy) file
42
```
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
43

44
45
46
47
The generation of an untyped AbstractCurry program is performed without
type checking (i.e. programs with type checks will compile). All functions
will either have the type signature specified in the source or, if not
available, the dummy type `prelude.untyped`.
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
48

49
50
51
FlatCurry files will always be generated for the imported modules,
since the interfaces are required for static-semantic analysis and type
inference (only for typed AbstractCurry).
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
52

53
## Remarks
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
54

55
56
57
58
- To use the PAKCS libraries (especially for the `Prelude`), the environment
  variable `PAKCS_LIB` has to point to the correct paths, e.g. using
  
  > export PAKCS_LIB=[pakcs path]/pacs/lib:[pakcs path]/pacs/lib/meta:...
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
59

60
  where `[pakcs path]` is the directory containing the PAKCS distribution.
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
61

62
63
64
65
66
67
- In contrast to PAKCS, the frontend allow use of anonymous variables
  (denoted by an underscore `_`) in type declarations, e.g.
  
  ```curry
  data T _ = c
  ```
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
68

69
## Known Issues
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
70

71
[See GitLab](https://git.ps.informatik.uni-kiel.de/curry/curry-frontend/-/issues)