1
1
Fork 0
mirror of https://github.com/azur1s/bobbylisp.git synced 2024-10-16 02:37:40 -05:00
bobbylisp/SYNTAX.md

1.9 KiB

Syntax

This language is still in development, the syntax can be changed at anytime.

Hazure is a free-form syntax style, so the indentation is purely for readability.

fun main: void = do
    @write("Hello, World!");
end;

is the same as

fun main: void = do @write("Hello, World!"); end;

Hazure is also expression-oriented like OCaml. There are currently 10 expressions:

  1. Comment
    -- Comment!
    -{ Block Comment }-
    
  2. Values / Types
    1
    true
    "string"
    variable
    
  3. Unary and Binary
    1 + 2
    !true
    
  4. Call and Intrinsic. Intrinsic starts with a @
    @write("Hello")
    foo("bar")
    
  5. Pipeline
    "Hello, World" |> @write(_)
    
  6. Variable declaration
    let foo: int = 727;
    let bar: string = "Hi";
    let baz: boolean = true;
    
  7. Function declaration
    fun foo: void = @write("void returns nothing");
    fun bar (x: int): int = x + 1;
    fun baz (x: int) (y: int): int = x + y;
    
  8. If conditions
    let cond: bool = true;
    if cond then
        @write("True");
    else
        do
            @write("False");
        end;
    end;
    
  9. Case matching
    case 1 + 1 of
        | 2 -> @write("Yes");
        | else @write("How?");
    end;
    
  10. Do notation. It allows you to have multiple expression because something like right hand side of the function declaration fun a: int = ... can only have 1 expression. Do allows you to bypass that.
    do
        @write("Hello, World");
        foo(bar);
        let baz: int = 6 + 10;
    end;
    

Hazure isn't a scripting language, so, you will need a main function.

fun main: void = do
    @write("Hello, World");
    @write(34 + 35);
end;