
On 16/05/2014, at 9:37 AM, silvio wrote:
In what languages is (.) cool, and in what way?
Because depending on what is before it, what is behind it can have different meanings.
That's not cool, that's majorly problematic. Ad hoc polymorphism is not good for readability.
For me this is one of the main points. I just don't like the name collision problem in Haskell. Take something like size for instance it is pretty clear what it means yet unless you have a type class that everybody knows about you can use it on only one thing.
For the person WRITING the code, this is a pain in the backside. For the person READING the code, it is great blessing. In Java, foo.size() could literally do ANYTHING. In Smalltalk, "x value" might be simply extracting a slot from an object or it might be invoking an arbitrarily complex operation with arbitrary side effects or (in at least one Smalltalk) it might be a special kind of synchronisation, and it's not hard to end up in situations where all three are in play. Note that the dot as such actually plays no significant role in OO. Common Lisp and Ada both can do dynamic dispatch using ordinary function call syntax. Indeed, Common Lisp shows an pretty horrible and not very principled restriction in the dotty view of the world: the dynamic call (draw Picture Canvas) can dispatch on Picture, or Canvas, or both, depending on what best suits your problem, whereas picture.Draw(canvas) can only dispatch on picture.