Formatted printing
printfmt("x: {}, y: {}\\n", payload.x, payload.y);
The compiler lowers each value to print<T>(value).
Custom printer
print: proc<Payload>(payload: Payload)->void = {
printfmt("Payload({}, {})", payload.x, payload.y);
}
Reflect type
name: *const char = Payload<>.name;
field_count: u64 = Payload<>.field_count;
Reflect fields
for (i: u64 = 0; i < Payload<>.field_count; i += 1) {
printfmt("field[{}] = {}\\n", i, Payload<>.fields[i].name);
}
Typed extension point
hash: proc<Payload>(payload: Payload)->u64 = {
return cast(payload.x, u64);
}