implement metaprogramming
implement metaprogramming