Compile time Strategy pattern using traits