Our main aim is to start off with a simple configuration language, like Dhall. From there we will progressively add features to gain more flexibility. We want to provide a textual syntax up-front, but we should aim to keep the core language reasonably decoupled from this, allowing us to provide support for projectional editing in the future.
You can read more about what we hope to achieve in Pondering the next version of Pikelet.
- Basic config language
- Comments
- Boolean literals/constants
- Integer literals/constants
- Float literals/constants
- Character literals/constants
- String literals/constants
- Record terms
- Non-dependent record types
- Dynamically sized arrays
- Fixed sized arrays
- Basic programming language
- Improved literal parsing
- Annotated terms
- Let expressions
- Record field lookups
- Import expressions
- Function terms
- Non-dependent function types
- Enumeration sets
- Pattern matching
- Recursive terms
- Dependently typed language
- Dependent record types
- Dependent function types
- Equality (identity) types
- Universe levels
- Multi-stage programming
- Quantitative type theory
- Surface → Pretty
- Surface → Core
- Core → Pretty
- Core → Value
- Core → Binary
- Core → Documentation
- Core → Cranelift
- Core → LLVM
- Value → JSON/YAML/TOML
- REPL
- Package manager
- Auto-formatter for surface language
- Structured editor
- Language samples
- Feature tests
- Property based tests
- Basic error enum
- Error recovery
- Pretty diagnostic reporting
- Mashalling traits
- Improved error messages
- Nicer marshalling API
- Derive macro for generating marshalling trait implementations
- More efficient, visitor based marshalling