So, given my problem, how should I go about this? I'm not even sure how to tell apart rational and irrational numbers, or to identify complex numbers. I have done some thinking about the other stuff though, and here's what I've come up with:

Any complex number that is squared still has an imaginary part.

Any imaginary number, when squared, will be less than 0.

Any real number, when squared, will be equal to or greater than 0. (Opposite of above).

Any integer will have a fPart of 0 (and whole numbers will be integers >= 0, and real numbers will be integers > 0).

Obviously pi and e are irrational, but square roots like sqrt(3) and stuff like 2pi needs to be identified as well.

Complex numbers could be identified by getting a string and searching for the plus or minus sign before using expr. However, evaluated stuff would end up being detected as complex (so 4+2 would be complex, but 6 would not).