
For the person WRITING the code, this is a pain in the backside. For the person READING the code, it is great blessing.
Acutely, I think dot notation is great to read.
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.
I don't see how a polymorphic (.) changes anything. If the output type which is decided by the input types is 'IO a' then it can do anything if it is not IO then it can't. Just like in any other Haskell function. I concede that doku is something I yet have to think about. But that's just a question of representing the info that is already there in a readable way. silvio