Created attachment 580553[details][diff][review]
Patch
Construct them using constructors that are purely a function of their arguments, and make access to the associated label type-safe. This is more code than the current way, but I think it's easier to follow by being more explicit and not relying on implicit state.