This repository implements three variants of an interpreted functional language, each focusing on a different type system:
- TIFL – A dynamically typed functional language with monomorphic types
- PIFL – Extends TIFL with type inference, parametric polymorphism and static type checking.
- SIFL – Statically checked language with support for nominal subtyping and bounded generics based on structural higher-order subtyping.
The different evolutions of the language are tracked in dedicated release branches, and separately released.
The CLI is built using:
./gradlew installDist
After installation, the interpreter can be invoked via the generated scripts in the project root:
./tifl– TIFL interpreter./pifl– PIFL interpreter./sifl– SIFL interpreter
Usage: sifl [<options>] <command> [<args>]...
Commands:
repl Run an interactive REPL
eval Evaluate an expression on a program
replstarts an interactive read–eval–print loop.eval <program> <expression>loads a program, performs static type checking, and evaluates the given expression.
Please refer to the contribution guidelines for Build and IDE Setup, including integration of a custom IntelliJ Idea Language Plugin.