- @name or @var
- @when
- @loop
- @fn
- @type
- @impl
- @next * replaces 'continue': go to next loop iteration.
- @fall (fallthrough) * may not be needed because of pattern matching
- @break * replaces 'break': break from current loop.
- @yield * replaces 'yield': yield from current block.
- @return * replaces 'return': return from current block.
- 'Done' wraps a value while indicating we return a value and are done.
- 'Some' wraps a value while indicating we yield a value and keep going.
- 'None' wraps no value while indicating we keep going.
- @return
- @panic
- @class
- @struct / @record / @value
- @trait
- @union
- @alias
- @pkg \ Package (project)
- @mod \ Module (folder)
- @cmp \ Component (file)
- @import
- @export
- @and &&
- @or ||
- @not !
- @least >=
- @most <=
- @above >
- @below <
- @between start < x < end
@x @is @between 3 @and 5
.@x @between 3..5
- @within start <= x <= end
- @outside x < val < x
- @@co // TODO: coroutines. * may be a std library function
- @@mut // TODO: mutability keywords?
- @@imm // TODO: mutability keywords?
- @@defer // TODO: implement
- @select //TODO: coroutine select in std library
- @@compile (execute at compile time)
- @@execute (compile and execute at runtime)
- @@analyze (interpret and execute at runtime)
Keywords start with the @
sigil. builtin functions like if
come from the si
namespace.
EXAMPLE
@let age:u32 = 0x21;
&si::if age \at_least 18 \and hasPaid $then 'welcome!' $else 'halt!!!';
if age >= 18 && hasPaid