https://softwarepatternslexicon.com/functional/miscellaneous-patterns/metaprogramming/reflection/
Reflection: Examining and Modifying Program Structure at Runtime