Allow me to get philosophical for a moment.
It occurs to me that a tomato isn’t a tomato because Zeus has decreed so. We only call it a tomato because it has a particular combination of properties. Its name comes from its properties, not the other way around. So object-oriented programming has it exactly backwards…
Then again, this is the same brain bug that causes lawmakers to ban tactical knives when kitchen knives are just as dangerous, and in fact any object with a sharp edge can cut, while any object with a sharp tip can stab, regardless of what we call it or what it was built for. Think an ice pick.
On a related note, it occurs to me that a car doesn’t drive, while a triangle doesn’t draw. So writing
triangle.draw() is just nonsensical. Sure, nowadays a car can drive itself, but it’s still a transitive verb.
I sometimes make fun of Haskell, but it may well be the only programming language with a sane object system…