
On Fri, 2008-10-03 at 12:59 -0700, Jonathan Cast wrote:
On Fri, 2008-10-03 at 21:02 +0100, Andrew Coppin wrote:
Jonathan Cast wrote:
On Fri, 2008-10-03 at 20:43 +0100, Andrew Coppin wrote:
OK. So it's broken "for compatibility" then? (Presumably any time you change something from the Prelude, mass breakage ensues!)
I'm not a big fan of backward-compatibility myself, but changing Monad to be a sub-class of Applicative actually would have broken every monad instance in existence (at the time Applicative was added, since it didn't have any instances yet). I don't know what proportion of Haskell programs/libraries/etc. have at least one Monad instance in them, but I would guess it's high.
Hmm, that's quite a lot of breakage.
So if it had been set up this way from day 1, we wouldn't be having this conversation, but it's now too expensive to change it. Is that basically what it comes down to?
Sort of. (Although I note that Monad isn't a sub-class of Functor, either, and I think those are coeval.) It is too expensive to change it during the period between when Applicative was discovered and now. But that could change in the future --- I'm sure a much higher of types with ^ proportion Monad instances happen to have Applicative instances as well now. If that proportion rises by enough, the backward compatibility argument would become less compelling.
jcc