Introducing symbolic terms
A cool thing in Necro could be being able to do something like
term bang<a, b, c> : st<out<a>> -> (a -> st<controlFlow<c, out<b>>>) -> st<controlFlow<c, out<b>>>
symbol ! := bang
and then being able to write
let%! v = something in ...
or maybe better
let v =%! something in ...
A more intuitive example is referencing and dereferencing
let v =%& something in
let v =%* v in
...
I think that in the generation is just a simple substitution of terms. It is something that we already do with aliases.
Those examples are concerned only about binders, but indeed also
term add : (int,int) -> int
symbol + := add
...
let r = + (n1, n2)
...
is more readable.
Edited by KHAYAM Adam