data SomeShow = forall a. SomeShow a (a -> String) foo :: SomeShow -> IO () foo ss = do SomeShow x f <- pure ss putStrLn (f x) bar :: SomeShow -> IO () bar ss = do let SomeShow x f = ss putStrLn (f x)