ekmett/free — pull request #48 by bafain (2014-03-09 22:33:28+00:00)
Title: MonadZip instance for CofreeT

Add an instance of `MonadZip` for `CofreeT` by generalising the instance definition for `Cofree`.

```haskell
instance (Alternative f, MonadZip f, MonadZip m) => MonadZip (CofreeT f m) where
mzip (CofreeT ma) (CofreeT mb) = CofreeT $ do
(a :< fa, b :< fb) <- mzip ma mb
return $ (a, b) :< (uncurry mzip <$> mzip fa fb)
```

The proofs for both `MonadZip (CofreeT f m)` and `MonadZip (Cofree f)` are provided in a similar manner to what @vklj did for issue #43.