In this particular case, the workaround is luckily simple:
case String.fromInt n of
Just "-1" -> True
_ -> False
I'm generally fine with language quirks like this, but I understand why others wouldn't be.
A number is not a string, you should not have to convert to strings like this. Evan's response on that issue is very typical - ask a question, get a negative reaction, completely ignore it and years later zero indication of a fix or change.