violet
Warning The project still in early stage.
A programming language focuses on
- dependent type
- effect system
- semantic versioning
- separate compilation
Usage
Load module into REPL
violet example/module.vt
Example
data Unit | unit
data Nat
| zero
| suc Nat
data Bool
| true
| false
def zero? (n : Nat) : Bool =>
match n
| zero => true
| suc _ => false
record T
| a : Nat
| b : Bool
def t (x : Nat) : T => (x, zero? x)
Develop
You will need to install lean, via any package manager would be fine. Especially recommend vscode plugin (https://marketplace.visualstudio.com/items?itemName=leanprover.lean4), install it and wait, it should install elan, lean, and lake for you.
Build the project
lake build
Theory
Here are some related theories we already applied or going to use.
- elaboration1
- universe polymorphism2 will try mugen
- termination checker3 will use lexicographic recursion
- type class4
- indexed data type5
Footnotes
-
Elaboration with first-class implicit function types: https://dl.acm.org/doi/10.1145/3408983 ↩
-
An Order-Theoretic Analysis of Universe Polymorphism: https://favonia.org/files/mugen.pdf ↩
-
foetus - Termination Checker for Simple Functional Programs: https://www2.tcs.ifi.lmu.de/~abel/foetus.pdf ↩
-
Tabled Typeclass Resolution: https://arxiv.org/pdf/2001.04301.pdf ↩
-
A SIMPLER ENCODING OF INDEXED TYPES: https://arxiv.org/pdf/2103.15408v4.pdf ↩