quail 0.1.0

The Quail Programming Language
# A program which prints out all of the prime numbers less than 16.

import nat

def one_hundred : Nat = mul four (mul five five)

def is_factor_of : Nat -> Nat -> Bool = fun n m  =>
    eq (rem m n) zero

def count_factors_iter : Nat -> Nat -> Nat -> Nat = fun n k acc =>
    match k
        with zero => acc
        with succ k' => (
            match is_factor_of k n
                with true => count_factors_iter n k' (succ acc)
                with false => count_factors_iter n k' acc
        )

## Counts the numer of factors for a given natural number.
def count_factors : Nat -> Nat = fun n =>
    count_factors_iter n n zero

def is_prime : Nat -> Bool = fun n =>
     eq (count_factors n) two

def sixteen : Nat = pow two (pow two two)

def repeat_iter : (Nat -> Top) -> Nat -> Nat -> Top = fun f n k =>
    match k
        with zero => top
        with succ k' =>
            let x = f (sub n k)
            in (repeat_iter f n k')


def repeat : (Nat -> Top) -> Nat -> Top = fun f n =>
    repeat_iter f n n

def print_prime : Nat -> Top = fun n =>
    match is_prime n
        with false => top
        with true => println (show n)

def main : Top = repeat print_prime sixteen