My point is this.
- The monadic approach to effects reifies functions into those that are 'pure' and those that perform I/O -- you can tell which is which from the type.
- If you discover deep inside a function that you need after all to perform some I/O then the type of the function changes, and the type of everything that uses it changes, all the way back to the I/O trunk. The way these changed parts fit together changes radically. There is here an in-built instability here that is not *in itself* desirable.
- To compare, if you suddenly find you need to use a sin function deeply in a package providing pure trigonometric functions you don't have to rebuild everything. Likewise, if I discover I need to copy a file in an I/O system then this is not a big deal. Discovering (in Haskell) that you need to perfrom I/O somewhere that you thought didn't need to perform I/O is not like this.
- This instability, is in itself regretable I think. I think it is regreatble in the way that having to debug code is regretable, or having to write code at all is regreatable (why doesn't it write itself?). Its the cost of doing business.
Of couse Martin Odersky may have meant something else but this is the only way I can make sense of it.
Making sense of part of what is being said and agreeing with it are quite different -- never mind agreeing with the wider point.
Chris