README.md 2.15 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`),
Fredrik Wieczerkowski's avatar
Fredrik Wieczerkowski committed
6
amonst other formats.
7

Fredrik Wieczerkowski's avatar
Fredrik Wieczerkowski committed
8
9
10
11
The project originated from a modified version of the Münster-Curry-Compiler
(MCC) for use with [PAKCS](https://git.ps.informatik.uni-kiel.de/curry/pakcs),
but can also be used with a variety of other backends, most notably including
[KiCS2](https://git.ps.informatik.uni-kiel.de/curry/kics2).
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
12

13
## Requirements
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
14

Fredrik Wieczerkowski's avatar
Fredrik Wieczerkowski committed
15
* Make sure that a recent version of Haskell Stack is installed on your computer
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
16

17
## Building
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
18

Fredrik Wieczerkowski's avatar
Fredrik Wieczerkowski committed
19
20
* To build the project, run `make`.
* To test the project, run `make runtests`.
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
21

Fredrik Wieczerkowski's avatar
Fredrik Wieczerkowski committed
22
The built executable will be located at `bin/curry-frontend`.
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
23

24
## Usage
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
25

26
For a detailed overview of the available options, you can use the following command:
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
27

28
`curry-frontend --help`
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
29

30
### Available Formats
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
31

32
```
33
34
35
36
--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
37
```
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
38

39
40
41
42
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
43

44
45
46
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
47

48
## Remarks
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
49

50
51
52
- To use the PAKCS libraries (especially for the `Prelude`), the environment
  variable `PAKCS_LIB` has to point to the correct paths, e.g. using
  
53
  `export PAKCS_LIB=[pakcs path]/pacs/lib:[pakcs path]/pacs/lib/meta:...`
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
54

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

57
58
59
60
61
62
- 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
63

64
## Known Issues
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
65

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