newtype CustomList a = CustomList [a] deriving Show instance Functor CustomList where fmap f (CustomList lst) = CustomList $ fmap f lst instance Applicative CustomList where pure x = CustomList $ repeat x {- -- default implementation pure x = CustomList [x] (CustomList fs) <*> (CustomList xs) = CustomList $ [f x | f <- fs, x <- xs] -} (CustomList fs) <*> (CustomList xs) = CustomList $ zipWith ($) fs xs