Snowlake is both a declarative language of regular rules of inference and propositional logic for defining static type inference rules of programming languages, as well as a compiler-compiler that can synthesize such inference rule definitions into code used for static type checking, typically used for semantic analysis in language compilers.
The goals of Snowlake are to:
- Provide a flexible declarative language that is able to define the static type inference rules of most programming languages.
- Facilitate language developers in defining, documenting and sharing the set of type inference rules of any particular language.
- Alleviate the burden on language developers from implementing type checking logic that are usually extremely complex, tedious and error-prone.