The Haxe Standard Library comes with a set of tool-classes to simplify working with macros. These classes work best as static extensions and can be brought into context either individually or as a whole through
using haxe.macro.Tools. These classes are:
ComplexTypeinstances in a human-readable way. Also allows determining the
Typecorresponding to a
Exprinstances in a human-readable way. Also allows iterating and mapping expressions.
Typeinstances in a human-readable way. Also offers several useful operations on types, such as unifying them or getting their corresponding
Furthermore the haxe.macro.Printer class has public methods for printing various types as a human-readable format. This can be helpful when debugging macros.
We learned about static extensions that using a module implies that all its types are brought into static extension context. As it turns out, such a type can also be a typedef to another type. The compiler then considers this type part of the module, and extends static extension accordingly.
This "trick" was first used in Juraj Kirchheim's tinkerbell library for exactly the same purpose. Tinkerbell provided many useful macro tools long before they made it into the Haxe Compiler and Haxe Standard Library. It remains the primary library for additional macro tools and offers other useful functionality as well.