
Brian Hulley wrote:
Hi, Looking at some of the ideas in http://www.haskell.org/haskellwiki/The_Other_Prelude , it struck me that the class system at the moment suffers from the problem that as hierarchies get deeper, the programmer is burdened more and more by the need to cut-and-paste method definitions between instances because Haskell doesn't allow a superclass (or ancestor class) method default to be redefined in a subclass.
The class aliases proposal lists several similar shortcomings of the current class system. http://repetae.net/john/recent/out/classalias.html
Perhaps there is some reason this can't be done?
Some random thoughts: How one would write instances? Using your Monad class, does instance Monad F where return = ... (>>=) = ... automatically define an instance for Applicative? If it does: What if there already is such an instance? Which one gets used for (>>)? The user-defined one or the Monad default? Is separate compilation still possible? (If there is no instance right now, one might pop out in another module...) If it does not: How can one define it, without copy-and-pasting the default? Zun.