vshow :: forall a -> (Show a) => a -> String
vshow t x = show (x :: t)

s1 = vshow Int 42

s2 = vshow Double 42

a1 = f (type (Int -> Bool))

a2 = f (type ((Read T) => T))

a3 = f (type (forall a. a))

a4 = f (type (forall a. (Read a) => String -> a))

foo =
  f
    ( type ( Maybe
               Int
           )
    )
