import Control.Applicative newtype MyZipList a = MyZipList { getMyZipList :: [a] } instance Functor MyZipList where fmap f (MyZipList x) = MyZipList (fmap f x) instance Applicative MyZipList where pure x = MyZipList [x] (MyZipList gs) <*> (MyZipList xs) = MyZipList (zipWith ($) gs xs)