--instance (Functor f, Functor g) => Functor (Product f g) where
--  fmap h (Pair f g) = Pair (fmap h f) (fmap h g)

(*:*) :: (Functor f, Functor g) => (a -> f a) -> (a -> g a) -> a -> (f :*: g) a
(*:*) = liftA2 Pair
(*:*) :: (Functor f, Functor g) => (a -> f a) -> (a -> g a) -> a -> (f :*: g) a
(*:*) = liftA2 Pair
(*:*) = liftA2 Pair