test1 :: (forall g. g a -> g b) -> f a -> f b test1 f a = f a test2 :: Functor f => f a -> f b test2 = undefined test3 :: Functor f => f a -> f b test3 = test1 test2