-
Setting up
duneproject and environment -
Untyped lambda calculus and beta reduction in
lib/untyped_lambda_calculus- Added sexp based parsing with
quickcheckround trip tests
- Added sexp based parsing with
-
Untyped nameless lambda calculus in
lib/untyped_nameless- DeBruijn Indicies with
remove_namesandrestore_names - Quickcheck roundtrip tests for removing and restoring variable names
- Evaluation with
shift/subst
- DeBruijn Indicies with
-
Start of simply typed lambda calculus in
simply_typed_lambda_calculusbooland->types only
-
Refactoring codebase
-
Bonsai based typing judgement visualizer, rendered with MathJax
-
Extensions to Simple Types (Chapter 8/11/12) in
lib/simply_typed_extendedseq,let,astuples,records, andvariants with projection functions- Syntactic sugar (dropping some parens in let/fun, implicit
< variant > = < variant : #u > - (Exhaustive) pattern matching with
(case _ of _) Nat,zero,succ,pred,iszerofixpoint withletrec
-
Simple beta reduction
eval(no closures)- Examples and test cases
-
Some debugging on LaTeX generation
-
Parser Combinator Library, porting from Abstract Machine project
- Convert to use
Core'sMonad.MakeandApplicative.Make - Add
AlternativeandFunctorsyntax - Use
streamof(char * pos) Sequence.tinstead ofchar list
- Convert to use
-
Implement parser combinator for
tyandt(lots of retries)-
Big test function takes ~60 seconds to parse (guessing issue is with too many
strips) -
Refactor to remove some backtracking (~30 seconds)
-
Implementation of Lexer to tokens
- Convert
Parserto be a functorChomp.Make(Lexer) - Parses arbitrary tokens instead of
string - Cuts down big test function to ~20 seconds
- Convert
-
Refactor parser to use
commiton first token (~12 seconds) -
Refactor parser to postfix forms that have valid expressions as a prefix (~1 second)
-
-
Simple REPL interface (not a true repl, just expression evaluator)
-
Completely move
sexpbased tests tochompbased test -
shift/substbased evaluation ofsimply_typed_extended- Closures naturally supported now, added tests
- Refactor to use
eval1to follow small step semantics more directly
-
Merging typechecker and evaluation tests
-
ref,!, and:=type checking and parsing, adding tests -
Refactoring using
Store(state monad implementation ofmu) forref-related evaluation -
Fix issue in REPL where
Ctrl-Dcauses error due toIn_channel.input_line_exn
-
Move
Lexertochompsince it will be shared for most impls, but keep genericParserfunctor -
Start work on
subtyping- Add parsers for
toptype and modifiedvariants(no longer needs to be ascribed to type), patching tests - Implement subtyping
<:and patch in terms that don't requirejoin/meet, replacing mostequal_tys joinforifandmatch, adding tests- Minimal
bottype implemented - Add
errorform withbottype, adding tests - Set
bool <: nat(implicitly,#f => 0and#t => 1)
- Add parsers for
-
Generic REPL implementation supporting
subtyping -
Makefile
-
evalforsubtyping, addingerror/exceptionforms -
featherweight_java(implementation was almost directly from the helper functions and rules in TAPL)- Parser for FJ, does not check if constructor has exact required order or contents
- Tests for
termandclass_declparsing - Typecheck
term - Typecheck methods and class declarations
- Evaluation of
termgivenclass_decls (uses subtyping!) - Complete tests for typecheck/eval
- REPL support
-
Recursive Types!
- This was not an implementation chapter, it was a bit of a struggle
- Github repository with implementations did not include subtyping either :(
-
Parser for recursive types (mostly copied)
-
Typechecking for recursive types
- Patched bug in
simply_typed_extendedandsubtypingwhere variant contents were not evaluated - Add tests for recursive types (map!)
- Fix bug where coinduction step used wrong
equal_ty(should use derived version)
- Patched bug in
-
Subtyping support
- Update tests accordingly
- Used
Unique_idto generate fresh variables to join into new recursive types - Add tests for subtyping in recursive types
-
Add Error form
-
Add REPL support
-
ML-style Polymorphism!
- Minimal parser and types
constraints,unify, andsubstbased polymorphism- Functions added with implicit newly generated type variable
rename_tyvarspass to rename variables like'v12to'aletform added,generalizeing over type schemes for performance- REPL support (no eval, would be same as previous languages)
refcells with value restrictionletrec,fix, andseqforms- Tests for all new cases
-
System F
- Parser for universal and existential types / related terms
- Typechecking for universal and existential types
- Tests for universal types
- Add global eval function
- Fix Bonsai dependency, add nix flake
- Add context stack information to chomp
- Implement f-sub
- Implement f-omega
- Implement f-omega-sub
-
REPL interface for type inference and evaluation
-
List / Arrays / Exceptions
-
Push Bonsai code
-
meet(as injoin/meet) -
Coercion semantics for runtime evaluation in
subtyping? -
Chapter 18/19 tests with objects
-
Web interface to quickly run examples
-
Mass commenting and documentation backlog
-
FJ: Better error messages in typechecker / evaluator
-
FJ: Less tolerant parser for constructors
-
FJ: Check for dependency cycles in subtyping
-
FJ: Extension exercises (assign field
ref-style,raise/try, interfaces,super, primitives) -
REC: More examples and tests
-
GM: Add more cases in general
-
GM: Tuples (need TupleProj type?)
-
GM: Row Polymorphism with records
-
GM: Better checks for free vars, aside from syntactic restriction