desugars operator overloading
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# lower

lowers expressions to their "desugared" form.

e.g

`a * b + c` => `(a.mul(b)).add(c)`

note that it is *extremely pervasive*, so
```rust
lower::math! { fn main() -> u8 {
    const X: u8 = 31 * 2;
    return 2 * X + 2;
} }
```
expands to
```rust
fn main() -> u8 {
    const X: u8 = 31.mul(2);
    return (2.mul(X)).add(2);
}
```
it should work for most expressions.

## why

well, you see, i made a [crate for arrays](https://crates.io/crates/atools).
then, i added `add`/`mul`/…, and got annoyed when i had to call them manually.
now, you can do amazing things such as `lower::math! { 2 * ([5, 2] + 5) }`.