Craft3e-0.1.0.2: QCfuns.hs
-------------------------------------------------------------------------
--
-- Haskell: The Craft of Functional Programming
-- Simon Thompson
-- (c) Addison-Wesley, 1996-2011.
--
-- QCfuns
--
-------------------------------------------------------------------------
module QCfuns where
import Test.QuickCheck
import System.IO.Unsafe -- for unsafePerformIO
-- Sampling and showing functions
sampleFun :: (Arbitrary a,Show a, Show b) => (a -> b) -> IO String
sampleFun f =
do
inputs <- sample' arbitrary
let list = [ (a,f a) | a <- inputs ]
return $ showMap list
showMap :: (Show a, Show b) => [(a,b)] -> String
showMap [] = "\n"
showMap [(a,b)] = showPair (a,b) ++ "\n"
showMap (p:ps) = showPair p ++ " ," ++ showMap ps
showPair :: (Show a, Show b) => (a,b) -> String
showPair (a,b) = "("++show a ++ "|->" ++ show b ++ ")"
instance (Arbitrary a, Show a, Show b) => Show (a -> b) where
show = unsafePerformIO . sampleFun