Metaprogramming

Approaches: