In general we want to avoid doing too much metaprogramming, but sometimes it's helpful. Here's an isolatd place to store it all