Smalltalk has separate True and False classes. Strictly following 'everything is OO', it makes sense: eg different 'not' implementations!
miniblog.
Related Posts
I'm slightly surprised that Rust has implemented the Default trait for booleans: https://doc.rust-lang.org/src/core/default.rs.html#205
The default is false, but it feels very arbitrary. Maybe it makes more sense next to integers, where the default value is 0.
PHP is adding union types, and even has a 'false' type to clarify the possible return values from built in functions!
It's amazing to me that Smalltalk has only six reserved words: nil, true, false, self, super and thisContext. When you go all-in on a unifying principle you can really keep the language small.