Skip to content
/ sixty Public

Dependent type checker using normalisation by evaluation

License

Notifications You must be signed in to change notification settings

ollef/sixty

Folders and files

NameName
Last commit message
Last commit date

Latest commit

2c78e57 · Sep 5, 2024
Feb 5, 2024
May 20, 2024
Feb 12, 2023
Jun 8, 2024
Sep 4, 2024
Sep 5, 2024
May 20, 2024
Aug 13, 2019
Jul 21, 2019
Jan 15, 2024
Mar 11, 2024
Feb 5, 2024
Apr 25, 2019
Oct 9, 2022
May 30, 2024
May 17, 2024

Repository files navigation

sixty

A type checker for a dependent type theory using normalisation by evaluation, with an eye on performance. Might go into Sixten one day.

Roadmap

  • Surface syntax
  • Core syntax
  • Safe and fast phantom typed De Bruijn indices
  • Evaluation
    • Inlining of globals
  • Readback
  • Parsing
    • Indentation-sensitivity
  • Pretty printing
    • Scope-aware name printing
  • Unification and meta variables
    • Pruning
    • The "same meta variable" intersection rule
    • Solution inlining
    • Elaboration of meta variable solutions to local definitions
    • Case expression inversion
  • Basic type checking
  • Elaboration postponement ("impredicative polymorphism" inference)
    • Lazily written solutions
  • Approximate polymorphic variable inference
  • Query architecture
    • Parallel type checking
  • Simple modules
    • Top-level definitions
    • Name resolution
    • Imports
  • Tests
    • Error tests
    • Multi-module tests
  • Position-independent implicit arguments
  • Errors
    • Source location tracking
      • Meta variable locations
    • Error recovery during
      • Parsing
      • Elaboration
      • Unification
    • Print the context and let-bound variables (including metas)
  • Data
    • Elaboration of data definitions
    • Constructors
      • Type-based overloading
    • ADT-style data definitions
  • Pattern matching elaboration
    • Case expressions
    • Exhaustiveness check
    • Redundant pattern check
    • Clause elaboration
    • Pattern lambdas
    • Smart case
  • Inductive families
  • Glued evaluation
  • Let definitions by clauses
    • Mutually recursive lets
  • Command-line parser
  • Language server
    • Diagnostics
    • Hover
      • Print the context and let-bound variables (including metas)
    • Jump to definition
    • Multi file projects
    • Reverse dependency tracking
    • Completion
    • Type-based refinement completion snippets
    • Find references
    • Renaming
    • Code lenses
    • Language server tests
  • File watcher
  • Cached builds
    • Per-module caches
  • Backend
    • Typed lambda lifting
      • Recursive let bindings
    • Typed closure conversion
    • Code generation
      • Basics
      • Closures
    • Precise, moving garbage collector
      • Cheney's two-space algorithm
      • Generational GC
    • Extern code
  • Prevent CBV-incompatible circular values
  • Literals
    • Numbers
    • Strings
  • Records
  • Binary/mixfix operators
  • REPL
  • Integrate into Sixten

Inspiration

About

Dependent type checker using normalisation by evaluation

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages