[Haskell-cafe] Why does `mzip /= liftM2 (,)`

Mateusz Kowalczyk fuuzetsu at fuuzetsu.co.uk
Thu Apr 20 20:07:28 UTC 2017

On 04/20/2017 08:19 PM, MarLinn wrote:
>> The question is why does
>> ```
>> mzip /= liftM2 (,)
>> ```
> I don't have any evidence, but my gut feeling is that indeed mzip == 
> liftM2 (,) == liftA2 (,), but that MonadZip just predates many advances, 
> and that it's not used often enough to warrant changing. Especially 
> because changing stuff in base comes with huge costs and long debates.

Normally I would agree but in case of adding instances, there are no
real costs or long debates. Indeed to add a lawful instance you could
just send a diff to GHC and see it in next version. In my experience
there are only arguments where there are multiple possible "reasonable"
instances &c. Hence my question in this case.

Even if it was legacy, IO was around in 2011 and there seems to be no
reason why it wouldn't have been one of the default instances.

> Today I would expect something similar to look somewhat more like this:
> ```
> class Applicative f => Unzippative f where
>      unzipF :: f (a,b) => (f a, f b)
> ```
> I personally can't remember a single time that function would have come 
> in handy, so I'm happy with Applicative. And I'm projecting that 
> experience onto others and drawing the conclusion of "Meh.".

I think we have a bunch across projects.

> But if you find out more after
>> investigating for next 30 minutes
> I'd be interested to hear. ;)

Me too! Maybe on weekend if there are no good replies.

> Cheers,
> MarLinn
> _______________________________________________
> Haskell-Cafe mailing list
> To (un)subscribe, modify options or view archives go to:
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> Only members subscribed via the mailman list are allowed to post.

Mateusz K.

More information about the Haskell-Cafe mailing list