I think you can do this in general with ScopedTypeVariables which GHC supports. This certainly compiles:
{-# LANGUAGE ScopedTypeVariables #-}
foo :: forall a. (a -> a) -> a -> a
foo f arg = bar arg
where
bar :: a -> a
bar a = f a
Note the “forall a.”