1
1
Fork 0
mirror of https://github.com/azur1s/bobbylisp.git synced 2024-10-16 02:37:40 -05:00
Another lisp dialect (mirror)
Find a file
2022-03-19 10:32:15 +07:00
crates switch case 2022-03-19 09:53:33 +07:00
example Create factorial.hz 2022-03-19 10:03:43 +07:00
std use module from github 2022-03-16 08:01:12 +07:00
.gitignore cpp -> typescript 2022-03-16 07:36:39 +07:00
Cargo.lock lowering error report 2022-03-12 20:46:43 +07:00
Cargo.toml diagnostic crate 2022-03-12 06:35:14 +07:00
FUNDING.yml update misc stuff 2022-03-07 03:53:44 +07:00
LICENSE-APACHE rename (again) 2022-03-06 23:51:03 +07:00
LICENSE-MIT rename (again) 2022-03-06 23:51:03 +07:00
README.md Update README.md 2022-03-19 10:32:15 +07:00

Hazure

Programming language that compiles to Typescript!

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

or with the pipeline operator:

fun main: void = do
    "Hello, World!\n"
    |> @write(_);
end;

Note: Everything in this project can be changed at anytime! (I'm still finding out what work best for lots of thing) if you have an idea, feel free to create an issues about it, or even create a PR! (I'd be very happy)

Prerequistie

  • deno
  • Rust (if you're going to build from source)

Contributing

Found a bug? Found a better way to do something? Make a pull request or tell me in the issues tab! Anything contributions helps :D

Steps to build:

  1. Clone this repo https://github.com/azur1s/hazure.git
  2. Build executable cargo build
  3. Try running some examples! path/to/executable compile path/to/file.hz

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");
        \ @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;

License

Hazure is licensed under both MIT license and Apache License