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
               )
        )
