mirror of
https://github.com/azur1s/bobbylisp.git
synced 2024-10-16 02:37:40 -05:00
1.9 KiB
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:
- Comment
-- Comment! -{ Block Comment }-
- Values / Types
1 true "string" variable
- Unary and Binary
1 + 2 !true
- Call and Intrinsic. Intrinsic starts with a
@
@write("Hello") foo("bar")
- Pipeline
"Hello, World" |> @write(_)
- Variable declaration
let foo: int = 727; let bar: string = "Hi"; let baz: boolean = true;
- 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;
- If conditions
let cond: bool = true; if cond then @write("True"); else do @write("False"); end; end;
- Case matching
case 1 + 1 of | 2 -> @write("Yes"); | else @write("How?"); end;
- 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;