quail 0.1.0

The Quail Programming Language
def one : Nat = succ zero
def two : Nat = succ one
def three : Nat = succ two
def four : Nat = succ three
def five : Nat = succ four
def six : Nat = succ five
def seven : Nat = succ six
def eight : Nat = succ seven
def nine : Nat = succ eight
def ten : Nat = succ nine

def add : Nat -> Nat -> Nat = fun n m =>
    match n
        with zero => m
        with succ n => succ (add n m)

def mul : Nat -> Nat -> Nat = fun n m =>
    match n
        with zero => zero
        with succ n => add m (mul n m)

def pow : Nat -> Nat -> Nat = fun n m =>
    match m
        with zero => succ zero
        with succ m' => mul n (pow n m')

def sub : Nat -> Nat -> Nat = fun n m =>
    match m
        with zero => n
        with succ m' => (
            match n
                with zero => zero
                with succ n' => sub n' m'
        )

def is_zero : Nat -> Bool = fun n =>
    match n
        with zero => true
        with succ x => false

def less_than_eq : Nat -> Nat -> Bool = fun n m =>
    match n
        with zero => true
        with succ n' => (
            match m
                with zero => false
                with succ m' => less_than_eq n' m'
        )

def less_than : Nat -> Nat -> Bool = fun n m =>
    less_than_eq (succ n) m

def rem : Nat -> Nat -> Nat = fun n m =>
    match less_than n m
        with true => n
        with false => rem (sub n m) m

def eq : Nat -> Nat -> Bool = fun n m =>
    match n
        with zero => (
            match m
                with zero => true
                with succ x => false
        )
        with succ n' => (
            match m
                with zero => false
                with succ m' => eq n' m'
        )

def main : Top = println (show (add two three))