Down with integers and floats as well! Seriously, replace them all with strong types. Just because you have two integers doesn't mean can mix them, and even if you can that doesn't mean all operations make sense. If you have a matrix you don't want to mix up row and columns accidentally (there are times to do it intentionally, but it should be clear that is intentional). A meter * a meter should result in a liter, while a meter * page count should fail to compile.
If you really want the full set of operations that a bool supports on your enum you can add them (every language I'm aware of makes this harder than it should be, but that is a different issue), but most of the time they don't make logical sense as operations for what I'm doing so I want my code to not compile if I do them - I just make a mistake.
[insert rant about different strings not being the same thing here]
We do need integers at the bottom of the stack, but we need to move up to strong non-fundamental types sooner. It makes things harder at first, but it saves a lot of bugs long term.
See, with strong types when someone catches errors like that it is fixed everywhere, or at least fails to compile where the bugs are, while with weak types you won't find every other place I made the same mistake without an expensive audit.
If you really want the full set of operations that a bool supports on your enum you can add them (every language I'm aware of makes this harder than it should be, but that is a different issue), but most of the time they don't make logical sense as operations for what I'm doing so I want my code to not compile if I do them - I just make a mistake.
[insert rant about different strings not being the same thing here]
We do need integers at the bottom of the stack, but we need to move up to strong non-fundamental types sooner. It makes things harder at first, but it saves a lot of bugs long term.