
On Wed, Mar 13, 2013 at 2:58 AM, David Luposchainsky < dluposchainsky@googlemail.com> wrote:
1. void is currently in Control.Monad. However, it is defined only in terms of fmap (and therefore only has a Functor constraint). Although this function is often used in a monadic setting as ">> return ()", I really don't think Control.Monad is the right place for it.
We could reexported the function in both places so we don't have to break code that depends on its current location.
2. a) swap is the only function from Data.Tuple that is not exported to Prelude. On #haskell, people are sometimes even surprised there /is/ a Data.Tuple, and redefine their own version of swap at need. I therefore suggest including Data.Tuple.swap in the Prelude.
The obvious downside of this change would of course be that it breaks code if there is a top-level user-defined version of it. Fixing this is of course trivial, but necessary.
I don't think we should add any more functions to the Prelude. It's a module that's automatically put into scope into every module (unless you explicitly use NoImplicitPrelude). Putting things in a global namespace like that is bad.
b) A related suggestion would be the addition of an irrefutable swap, (swap'?), defined as "swap ~(a,b) = (b,a)", and its addition to Prelude for the same reasons.
Add it to Data.Tuple.
3. $>, a flipped version of <$, currently resides in Control.Comonad, but should be in Data.Functor. Applicative has <* and *>, Monad has >>= and =<<, and I personally keep redefining (or specifically importing) $> quite often, and I don't think I'm the only one.
Makes sense to me.
As these are quite small changes I think 2 weeks should be a sufficiently long discussion period.
Adding things to the Prelude is not a small thing! :) -- Johan