-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Automating QuickCheck for polymorphic and overlaoded properties -- -- Automating QuickCheck for polymorphic and overlaoded properties in a -- small world of types @package quickcheck-poly @version 0.2.0.1 -- | crazy hack !!! to force evaluating quickCheck in the hint Haskell -- interpreter you shouldn't really do this in any other places module Test.QuickCheck.UnsafeShowIO instance (Show a) => Show (IO a) -- |
--   import Test.QuickCheck.PolyQC
--   import Prop -- the module that defiens the properties p0, p1, p2, p3, p4
--    -- p0 x = x == x
--    -- p1 x y z = x + (y + z) == (x + y) + z
--    -- p2 x y = x + y == y + x
--    -- p3 x = x == negate (negate x)
--    -- p4 p = (fst p, snd p) == p
--   main = do putStrLn "testing p0 ======================================="
--             print =<< polyQuickCheck' "Prop" "p0" ["Bool","Int","Double"]
--             putStrLn "testing p1 ======================================="
--             print =<< polyQuickCheck' "Prop" "p1" ["Bool","Int","Double"]
--             putStrLn "testing p2 ======================================="
--             print =<< polyQuickCheck' "Prop" "p2" ["Bool","Int","Double"]
--             putStrLn "testing p3 ======================================="
--             print =<< polyQuickCheck' "Prop" "p3" ["Bool","Int","Double"]
--             putStrLn "testing p4 ======================================="
--             print =<< polyQuickCheck' "Prop" "p4" ["Bool","Int","Double"]
--             return ()
--   
-- -- the result of running this is -- --
--   > :t p0
--   p0 :: (Eq a) => a -> Bool
--   > :t p1
--   p1 :: (Num a) => a -> a -> a -> Bool
--   > :t p2
--   p2 :: (Num a) => a -> a -> Bool
--   > :t p3
--   p3 :: (Num a) => a -> Bool
--   > :t p4
--   p4 :: (Eq a, Eq b) => (a, b) -> Bool
--   > main
--   testing p0 =======================================
--   Right ["(\"(Eq Bool) => Bool -> Bool\",+++ OK, passed 100 tests.
--   ())","(\"(Eq Int) => Int -> Bool\",+++ OK, passed 100 tests.
--   ())","(\"(Eq Double) => Double -> Bool\",+++ OK, passed 100 tests.
--   ())"]
--   testing p1 =======================================
--   Right ["(\"(Num Int) => Int -> Int -> Int -> Bool\",+++ OK, passed 100 tests.
--   ())","(\"(Num Double) => Double -> Double -> Double -> Bool\",*** Failed! Falsifiable (after 9 tests and 2 shrinks):    
--   4.0
--   -26.0
--   8.777291602197652
--   ())"]
--   testing p2 =======================================
--   Right ["(\"(Num Int) => Int -> Int -> Bool\",+++ OK, passed 100 tests.
--   ())","(\"(Num Double) => Double -> Double -> Bool\",+++ OK, passed 100 tests.
--   ())"]
--   testing p3 =======================================
--   Right ["(\"(Num Int) => Int -> Bool\",+++ OK, passed 100 tests.
--   ())","(\"(Num Double) => Double -> Bool\",+++ OK, passed 100 tests.
--   ())"]
--   testing p4 =======================================
--   Right ["(\"(Eq Bool, Eq Bool) => (Bool, Bool) -> Bool\",+++ OK, passed 100 tests.
--   ())","(\"(Eq Bool, Eq Int) => (Bool, Int) -> Bool\",+++ OK, passed 100 tests.
--   ())","(\"(Eq Bool, Eq Double) => (Bool, Double) -> Bool\",+++ OK, passed 100 tests.
--   ())","(\"(Eq Int, Eq Bool) => (Int, Bool) -> Bool\",+++ OK, passed 100 tests.
--   ())","(\"(Eq Int, Eq Int) => (Int, Int) -> Bool\",+++ OK, passed 100 tests.
--   ())","(\"(Eq Int, Eq Double) => (Int, Double) -> Bool\",+++ OK, passed 100 tests.
--   ())","(\"(Eq Double, Eq Bool) => (Double, Bool) -> Bool\",+++ OK, passed 100 tests.
--   ())","(\"(Eq Double, Eq Int) => (Double, Int) -> Bool\",+++ OK, passed 100 tests.
--   ())","(\"(Eq Double, Eq Double) => (Double, Double) -> Bool\",+++ OK, passed 100 tests.
--   ())"]
--   
module Test.QuickCheck.PolyQC -- | data type for modules to import in the hint Haskell interpreter data ModuleImports ModuleImports :: String -> [String] -> [String] -> ModuleImports -- | the module where properties are defined top :: ModuleImports -> String -- | extra local modules to load locals :: ModuleImports -> [String] -- | extra package modules to import packages :: ModuleImports -> [String] withModule :: String -> ModuleImports polyQuickCheck :: (MonadCatchIO m, Functor m) => ModuleImports -> String -> [[Char]] -> m (Either InterpreterError [String]) polyQuickCheck' :: (MonadCatchIO m, Functor m) => String -> String -> [[Char]] -> m (Either InterpreterError [String]) polyQuickCheckResult :: (MonadCatchIO m, Functor m) => ModuleImports -> String -> [[Char]] -> m (Either InterpreterError [String]) polyQuickCheckResult' :: (MonadCatchIO m, Functor m) => String -> String -> [[Char]] -> m (Either InterpreterError [String]) instance Eq ModuleImports instance Ord ModuleImports instance Show ModuleImports instance Read ModuleImports