ava/notes/general-syntax.md

1.8 KiB

General Syntax

Type Binding

Some name may be bound to some type by using the : (colon) syntax.

name: Type

Type bindings are used for all such occurrences. This includes:

Value Binding

Some name may be bound to some value by using the := syntax.

name := value
name: Type := value

Comments

Comments are lines where the first non-whitespace characters are --. This was selected for ease of typing paired with low visual noise.

-- this is a comment
-- this is another comment
let x := "foo" -- this will not compile, comments cannot be mixed with code

Ava does not support multi-line comments.

Code Documentation

Code documentation is written using comments that both directly-precede certain definitions and have 3 - characters:

--- This function does some foo as well as some bar.
--- @param x Documentation for the `x` parameter.
fn foo_bar: (x: String) => Int32

Block Definitions

All block definitions are closed by a companion end keyword that refers to the initating keyword.

fn foo: () => ()
    ()
end fn

given A
class Bar
    fn foo2: () => ()
end class

instance Bar[A]
    fn foo2: () => ()
        ()
    end fn
end instance

enum Color
    object Red
    object Green
    object Blue
end enum

fn control_if: () => ()
    if 1 + 1 > 2 then
        ()
    else if 2 + 2 > 4 then
        ()
    else
        ()
    end if
end fn

fn control_do: () => Option[Int32]
    do
        x <- Some(1)
        y <- Some(2)
    return x + y
end fn

fn control_match: () => Int32
    match "foo"
        case "foo" => 1
        case _ => 0
    end match
end fn

infix plus: (left: Int32, right: Int32) => Int32
    left + right
end infix