Hello list, I'm trying to accomplish something along this line

{-# LANGUAGE ScopedTypeVariables #-}

f :: IO (a -> a)
f = return id

main = do
  (g :: a -> a) <- f
  print $ g 1
  print $ g "ciao"



Is it possible or I have to call f more than once to get different g's


Thanks

paolino