    module ShowFun where

    import Data.Typeable

    instance (Typeable a, Typeable b) => Show (a -> b) where
        show :: (a -> b) -> String
    show e :: a -> b
    e = '<' Char -> ShowS
    forall a. a -> [a] -> [a]
    : (TypeRep -> String
    forall a. Show a => a -> String
    show (TypeRep -> String) -> ((a -> b) -> TypeRep) -> (a -> b) -> String
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . (a -> b) -> TypeRep
    forall a. Typeable a => a -> TypeRep
    typeOf) a -> b
    e String -> ShowS
    forall a. [a] -> [a] -> [a]
    ++ ">"

    instance Typeable a => Show (IO a) where
        show :: IO a -> String
    show e :: IO a
    e = '<' Char -> ShowS
    forall a. a -> [a] -> [a]
    : (TypeRep -> String
    forall a. Show a => a -> String
    show (TypeRep -> String) -> (IO a -> TypeRep) -> IO a -> String
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . IO a -> TypeRep
    forall a. Typeable a => a -> TypeRep
    typeOf) IO a
    e String -> ShowS
    forall a. [a] -> [a] -> [a]
    ++ ">"