There are other unary expressions (e.g. `~`) so we should be checking the operator as well, and maybe whether it's a prefix operator. Otherwise things like this:

    ~Infinity

would get encoded as -Infinity. This is getting long and heinous now, so I'd extract the conditions into a helper function :)