At times, I run into the "feature" that Haskell only matches instance heads, namely,

instance (a ~ NewDataTyp b) => C a

will now match any type whatsoever, i.e. writing another instance declaration of C in your program will is an error, even if it cannot possibly conflict due to the context a ~ NewDataTyp b. At times, it takes a lot of effort to overcome; I've had to restructure hundreds of lines of code to avoid this limitation.

Are there any language extensions, or descendant languages (Curry? Agda?) that are designed with a higher priority for expressiveness? This could possibly sacrifice (a) openness of the typeclass world (b) polynomial time typechecking.

edit -- for those interested in the question, this page might also be of interest: http://www.haskell.org/haskellwiki/Future_of_Haskell

Edit
Report