
2008/11/10 Johannes Waldmann
Well, my original post wasn't that negative ...
Indeed "then f [by e]" seems a nice idea *but* the point was that I'd like to have this in any monad.
The type of f in "then f" should be m a -> m b, not just m a -> m a, because then you don't need special syntax for "group", which is somewhat like [a] -> [[a]] ?
Hi Johannes, I'm not sure what it would mean for f to have type m a -> m b. The point of the parametric polymorphism in the type forall a. m a -> m b is that the "f" function is guarenteed not to inspect the structure of the (list/monad) element. This allows the compiler to choose a representation for the intermediate tuples used in the desugaring freely. The "group" syntax really does desugar differently from "then" because the compiler inserts an extra unzip_n that the user could not have written, given that parametric polymorphism. All the best, Max