    module Hedgehog.Classes.Common.IO
      ( genIO
      , showIO
      ) where

    import Hedgehog
    import System.IO.Unsafe (unsafePerformIO)

    genIO :: Gen a -> Gen (IO a)
    genIO :: forall a. Gen a -> Gen (IO a)
    genIO Gen a
    gen = (a -> IO a) -> Gen a -> GenT Identity (IO a)
    forall a b. (a -> b) -> GenT Identity a -> GenT Identity b
    forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
    fmap a -> IO a
    forall a. a -> IO a
    forall (f :: * -> *) a. Applicative f => a -> f a
    pure Gen a
    gen

    showIO :: Show a => IO a -> String
    showIO :: forall a. Show a => IO a -> String
    showIO IO a
    io = IO String -> String
    forall a. IO a -> a
    unsafePerformIO (IO String -> String) -> IO String -> String
    forall a b. (a -> b) -> a -> b
    $ do
      String
    x <- (a -> String) -> IO a -> IO String
    forall a b. (a -> b) -> IO a -> IO b
    forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
    fmap a -> String
    forall a. Show a => a -> String
    show IO a
    io
      let y :: String
    y = String
    "IO " String -> String -> String
    forall a. [a] -> [a] -> [a]
    ++ String
    x
      String -> IO String
    forall a. a -> IO a
    forall (f :: * -> *) a. Applicative f => a -> f a
    pure String
    y