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