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

Mateusz Kowalczyk fuuzetsu at fuuzetsu.co.uk
Thu Apr 20 18:52:36 UTC 2017


Today after half a decade I have found `MonadZip` in `base`.

The laws state:

liftM (f *** g) (mzip ma mb) = mzip (liftM f ma) (liftM g mb)

liftM (const ()) ma = liftM (const ()) mb
munzip (mzip ma mb) = (ma, mb)

The question is why does

mzip /= liftM2 (,)

in plain words. Notably we can see lack of IO instance which I'm
guessing has something to do asynchronous exceptions but I'm probably
wrong…. Rather than investigating for next 30 minutes, I thought I'd
just sample existing knowledge (that I could not find out from Google).

In what circumstances can we not replace `liftM2 (,)` with `mzip`?

Mateusz K.

More information about the Haskell-Cafe mailing list