From reading the QuickCheck documentation, the type you are looking for is Result
:
data Result
= MkResult
{ ok :: Maybe Bool -- ^ result of the test case; Nothing = discard
, expect :: Bool -- ^ indicates what the expected result of the property is
, reason :: String -- ^ a message indicating what went wrong
, interrupted :: Bool -- ^ indicates if the test case was cancelled by pressing ^C
, abort :: Bool -- ^ if True, the test should not be repeated
, stamp :: [(String,Int)] -- ^ the collected values for this test case
, callbacks :: [Callback] -- ^ the callbacks for this test case
}
and thanks to the instance Testable Result
you can use this as the return type of QuickCheck tests:
Prelude Test.QuickCheck Test.QuickCheck.Property> let test xs = if 13 `elem` xs then MkResult (Just False) True "Input contained bad number" False False [] [] else succeeded
Prelude Test.QuickCheck Test.QuickCheck.Property> quickCheck test
*** Failed! Input contained bad number (after 17 tests and 3 shrinks):
[13]