Program Structure

An executable .melo file contains 0 or more definitions (these can be of functions, structures, and type aliases) and, optionally, three dashes (---) followed by a single expression.

Here’s an example file fibonacci.melo. It defines a fibonacci function and calls it on 15

# returns the nth fibonacci number, starting from 0
def fibonacci<$n>(n: {$n}) =
    let i = 0 :: Nat in
    let j = 1 :: Nat in
    let tmp = 0 :: Nat in
    loop $n do
        tmp <- j;
        j <- i + j;
        i <- tmp;
    return i



When you start a REPL instance with fibonacci.melo, the expression fibonacci(15) is immediately evaluated:

$ melorun -i fibonacci.melo
- : Nat
610 (truthy)

The three dashes are needed to end the definitions section because whitespace is insignificant in Melodeon, and Melodeon doesn’t have delimiters. While this makes Melodeon syntax both elegant and flexible, it also means that the compiler cannot tell where the last function definition ends and the standalone expression begins without some help from us.

Comments start with a single #. For an example, see the first line of fibonacci.melo above.