Make do-notation a bit more flexible (Trac #1537)
This is a second attempt to fix #1537: to make the static typechecking of do-notation behave just like the desugared version of the same thing. This should allow parameterised monads to work properly (see Oleg's comment in the above ticket). We can probably merge to 6.8.3 if it goes smoothly. Incidentally, the resulting setup suffers from greater type ambiguity if (>>=) has a very general type. So test rebindable6 no longer works (at least not without more type signatures), and rebindable5 requires extra functional dependencies. But they are weird tests.
Showing with 23 additions and 15 deletions