This is trivial if we just say that either:
A) All pointers have to point to primitive.
B) Pointers can point to anything regardless of address space.
In either case, the address space of a pointer is decoupled from the pointed-to type, and so could be expressed as its own type variable. Yay!
Note that (B) is totally OK - we can just say that this is an instantiation-time verification.
We don't have generics any more, so this doesn't make any sense.
Migrated to https://github.com/gpuweb/WHLSL/issues/129