In the usual approach to ordinals and cardinals (namely, von Neumann's approach), every cardinal is also an ordinal, and every ordinal is also a set. So if $\kappa$ is a cardinal, then the expression $2^\kappa$ has at least three meanings; so its meaning has to be specified in the surrounding text, or inferred from the context.
Now arguably, this isn't an issue of any real substance. That's a perfectly legitimate position; I don't happen to share it. For that reason, I'd like to experiment with the idea that set, ordinal and cardinal are mutually exclusive concepts. That way, if $\kappa$ is a cardinal, then expressions like $2^\kappa$ are unambiguous - e.g. in this case, its definitely cardinal exponentiation we're doing.
To give another example, there's good reason to distinguish between Conway's implementation of the surreal numbers, and the surreal numbers themselves. Otherwise, statements like $x=y$ are ambiguous - do we mean they're equal as numbers, or that they're equal as sets?
So we now have two reasons to distinguish between entities and the sets that represent them. The first was the ambiguity of expressions like $2^\kappa$. The second is the ambiguity of statements like $x=y$.
Lets focus our attention on the surreal numbers as an example. Suppose for a moment that we're sold on the above arguments. In this hypothetical universe, we want to distinguish between Conway's implementation of the surreal numbers, and the surreal numbers themselves.
Okay, one way of doing this would be to conservatively extend our language with new sorts. So we start off with a one sorted language whose elements are called 'sets.' Then we define a proper class $C$ whose elements are precisely the sets that Conway calls 'surreal numbers,' as well as an equivalence relation $\sim$ on $C$ that specifies which elements of $C$ are identical as numbers.
Now here comes the unconventional part. Instead of stopping there, we go one step further by extending our language with a new sort $S$ whose elements are called 'surreal numbers', and a canonical function $C \rightarrow S$ such that if $f$ is the aforementioned function, then $x \sim y \Leftrightarrow f(x)=f(y)$ for all $x,y \in C$.
It seems great in theory, but there's a problem: we can't collect surreal numbers into sets. After all, $\in$ is a relationship between two sets, so if $\alpha$ is a surreal number, then '$\alpha \in X$' isn't even a well-formed expression! Clearly, this isn't convenient.
Question. Can the approach using sorts be salvaged? If so, how?
I hope its salvageable, but lets assume for the moment that it isn't, or that no one knows how. Then we need another approach.
Enter the atom (or urelement, if you prefer). We begin the same: define $C$ and $\sim$. But, instead of adding a new sort $S$, we just collect a bunch of atoms together into a class, call it $S$ for 'surreal numbers.' Since atoms can belong to sets, concepts like $\alpha \in X$ make sense, even if $\alpha$ is surreal. Yay! We've solved the problem. That's the theory, but I've never actually seen this done in practice. What does it actually look like? Thus, I have a request.
Request. Can someone write up an example of how this would be done, in practice? I get the general gist of the idea, but I'm unsure about the details.