{-# LANGUAGE ImpredicativeTypes, RequiredTypeArguments, TypeAbstractions #-} module Foo where foo :: Functor f => f (forall a -> f a) -> forall a -> f (f a) foo x a = fmap (\y -> y a) x -- means ^ foo' :: Functor f => f (forall a. f a) -> forall a. f (f a) foo' x @a = fmap (\y -> y @a) x -- means ^ foo'' :: Functor f => f (forall a. f a) -> forall a. f (f a) foo'' x = fmap (\y -> y) x