nessa-language 0.9.1

An extensible programming language with a strong type system
Documentation
Sometimes you want to use macros to create small code transformations that result in an expression (ie. not an **if-else**, **for**, **while** or definition). 
For this purpose, you can use the second type of macro that Nessa has: **expression macros**. Let"s see how they work.

## Syntax


An expression macro can be created in Nessa using this syntax:

```
syntax expr macro_name from NDL_Pattern {
    [...]
}
```

You can see that the syntax is almost the same, but contains the `expr` keyword. The other thing that changes is how they are compiled
internally:

```
syntax expr double_integer from "Dbl" Arg(1{d}, n) {
    $n + $n
}

// This macro ...
print(Dbl6);

// ... is compiled to this
print(6 + 6);
```

You might be worrying about operator precedence by looking at this, but the interpreter ensures that the expression inside
the macro is kept as-is, so you could use it like this:

```
// This macro ...
print(2 * Dbl6);

// ... is compiled to this ...
print(2 * (6 + 6));

// ... not to this
print(2 * 6 + 6);
```