Nitpick:

I think `DollarToken` should be defined as a private struct. It would make little sense for a user to instantiate one himself.

`opDollar` can also be implemented as an enum (or static immutable).

I don't know if the compiler is smart enough to avoid creating the DollarToken entirely, but by declaring `opDollar` as a compile time object, at minimum, it avoids a calling the runtime `opDollar` function (AFAIK).