{-# LANGUAGE ScopedTypeVariables #-} test :: IO Char test = do x :: Char <- getChar return x value :: String = "Hello" forallTest :: forall x . Eq x => x -> x forallTest x = if x == x then (undefined :: x) else x