I only just realized that you can use protocols as tags on arbitrary classes. Not unlike how some people use template arguments as tags in C++.