module QCfuns where
import Test.QuickCheck
import System.IO.Unsafe
sampleFun :: (Arbitrary a,Show a, Show b) => (a -> b) -> IO String
sampleFun :: forall a b. (Arbitrary a, Show a, Show b) => (a -> b) -> IO String
sampleFun a -> b
f =
do
[a]
inputs <- Gen a -> IO [a]
forall a. Gen a -> IO [a]
sample' Gen a
forall a. Arbitrary a => Gen a
arbitrary
let list :: [(a, b)]
list = [ (a
a,a -> b
f a
a) | a
a <- [a]
inputs ]
String -> IO String
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (String -> IO String) -> String -> IO String
forall a b. (a -> b) -> a -> b
$ [(a, b)] -> String
forall a b. (Show a, Show b) => [(a, b)] -> String
showMap [(a, b)]
list
showMap :: (Show a, Show b) => [(a,b)] -> String
showMap :: forall a b. (Show a, Show b) => [(a, b)] -> String
showMap [] = String
"\n"
showMap [(a
a,b
b)] = (a, b) -> String
forall a b. (Show a, Show b) => (a, b) -> String
showPair (a
a,b
b) String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"\n"
showMap ((a, b)
p:[(a, b)]
ps) = (a, b) -> String
forall a b. (Show a, Show b) => (a, b) -> String
showPair (a, b)
p String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" ," String -> String -> String
forall a. [a] -> [a] -> [a]
++ [(a, b)] -> String
forall a b. (Show a, Show b) => [(a, b)] -> String
showMap [(a, b)]
ps
showPair :: (Show a, Show b) => (a,b) -> String
showPair :: forall a b. (Show a, Show b) => (a, b) -> String
showPair (a
a,b
b) = String
"("String -> String -> String
forall a. [a] -> [a] -> [a]
++a -> String
forall a. Show a => a -> String
show a
a String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"|->" String -> String -> String
forall a. [a] -> [a] -> [a]
++ b -> String
forall a. Show a => a -> String
show b
b String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
")"
instance (Arbitrary a, Show a, Show b) => Show (a -> b) where
show :: (a -> b) -> String
show = IO String -> String
forall a. IO a -> a
unsafePerformIO (IO String -> String)
-> ((a -> b) -> IO String) -> (a -> b) -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> b) -> IO String
forall a b. (Arbitrary a, Show a, Show b) => (a -> b) -> IO String
sampleFun