aboutsummaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md33
1 files changed, 25 insertions, 8 deletions
diff --git a/README.md b/README.md
index 7140111..3f28020 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,10 @@
-# chrysanthemum: a simple type system
+# chrysanthemum
+
+chrysanthemum is a simple language with a type system, initially written as a term project for CPSC 539.
+It implements a number of features from the excellent *Types and Programming Languages*, including:
+- The simply typed lambda calculus
+- Bidirectional type checking and subtyping support
+- A somewhat complex type system: including support for `unit`, `bool`, `nat`, `int`, `float`, `str`, `union`, `struct`, `empty`, and `err` types
## todo
@@ -8,19 +14,30 @@
- [x] bidirectional typechecking: implement `infer` and `check`
- [x] extend to additional basic types: refactor `Term`
- [ ] extend to complex types: implement `access`
-- [ ] simple effects: extend `ast`
- [ ] type classes: implement `monomorphize`
+- [ ] simple effects: extend `ast`
- [x] testtesttest
## architecture
```bash
src/
-src/main.rs # the user facing program
-src/parser.rs # parses user programs into proper data structures
-src/ast.rs # the fundamental representation of the program
-src/simple.rs # the core of the lambda calculus: checking, inference, evaluation
-src/effects.rs # code for effects idk
-src/classes.rs # a monomorphization pass for type classes
+src/main.rs # the user facing program
+src/simple.rs # the simple lambda calculus: execution
+src/ast.rs # the fundamental representation of types and terms
+src/bidirectional.rs # the core of the language: checking, inference
+src/unification.rs # an alternate core: checking and inference by unification
+src/parser.rs # parses user programs into proper data structures
+src/monomorphize.rs # a monomorphization pass for type classes
+src/effects.rs # code for effects idk
test/ # various tests
```
+
+## bibliography
+
+- [TAPL](https://www.cis.upenn.edu/~bcpierce/tapl/)
+- [Bidirectional Typing Rules: A Tutorial](https://www.davidchristiansen.dk/tutorials/bidirectional.pdf)
+- [Bidirectional Typechecking](https://research.cs.queensu.ca/home/jana/bitype.pdf)
+- [Typechecking for Higher-Rank Polymorphism](https://arxiv.org/pdf/1306.6032.pdf)
+- [Bidirectional Type Class Instances](https://arxiv.org/pdf/1906.12242.pdf)
+- [How to make ad-hoc polymorphism less ad-hoc](https://dl.acm.org/doi/pdf/10.1145/75277.75283)