Since a decoder can do multiple things, it can do either: return what it does as a set of possible types (means allocation). Or calls back to someone -- which is implemented here.