← Back to AILP Home

Macros

Nitpick macros are compile-time code rewriting rules. A macro invocation is replaced by its expanded body before type-checking and code generation.

Contents

Overview

// declare a macro
macro:double = (x) {
    x + x;
};

// invoke it
int32:result = double!(10i32);   // expands to: 10 + 10

Macros differ from functions:

Macro Function
Evaluated at Compile time Run time
Arguments Unevaluated AST fragments Evaluated values
Return type Inferred from expansion Declared explicitly
Recursion depth Limited (default 64) Unlimited
Hygiene Yes — fresh variable names N/A

When to Use Macros