syntactic-1.4: Generic abstract syntax, and utilities for embedded languages
This library provides:
- Generic representation and manipulation of abstract syntax
- Composable AST representations (partly based on Data Types à la Carte [1])
- A collection of common syntactic constructs, including variable binding constructs
- Utilities for analyzing and transforming generic abstract syntax
- Utilities for building extensible embedded languages based on generic syntax
For more information about the core functionality, see "A Generic Abstract Syntax Model for Embedded Languages" (ICFP 2012):
- Paper: http://www.cse.chalmers.se/~emax/documents/axelsson2012generic.pdf
- Slides: http://www.cse.chalmers.se/~emax/documents/axelsson2012generic-slides.pdf
For a practical example of how to use the library, see the
proof-of-concept implementation Feldspar EDSL in the examples
directory. (The real Feldspar [2] is also implemented using
Syntactic.)
The maturity of this library varies between different modules. The core part (Language.Syntactic) is rather stable, but many of the other modules are in a much more experimental state.
[1] W. Swierstra. Data Types à la Carte. Journal of Functional Programming, 18(4):423-436, 2008, http://dx.doi.org/10.1017/S0956796808006758.
Modules
- Data
- Language
- Language.Syntactic
- Language.Syntactic.Constraint
- Constructs
- Language.Syntactic.Constructs.Binding
- Language.Syntactic.Constructs.Condition
- Language.Syntactic.Constructs.Construct
- Language.Syntactic.Constructs.Decoration
- Language.Syntactic.Constructs.Identity
- Language.Syntactic.Constructs.Literal
- Language.Syntactic.Constructs.Monad
- Language.Syntactic.Constructs.Tuple
- Frontend
- Interpretation
- Sharing
- Language.Syntactic.Sugar
- Language.Syntactic.Syntax
- Language.Syntactic.Traversal
- Language.Syntactic