@lispm @sigue @ksaj
By "better" object system I meant (a) generic functions, which just soothe my brain instead of making me thing message-passing is something different, and (b) a bit more regular in form, from having been designed all at once.
Probably not better along a number of other dimensions!
Personally, I like organizing around what Java folk would call interfaces, and back in the day we called protocols. It's both a class and generic function thing, but it clearly establishes boundaries and Dijkstra-like "separation of concerns" in your code.
Dylan took that even further, by giving very, very heavy weight to being statically analyzable most of the time. (E.g., classes sealed by default, some oddball rules around inheritance, etc. that all mean methods are completely discoverable at library-level compilation time.)
Now, there's also tight vs loose binding, which is Dylan's version of the fragile base class problem. I dunno the solution to that.
I finished out my career hacking stats & applied math in R, and now I fiddle around the edges of Haskell.