
I'd like to use QuickCheck on IO code. For instance, I'd like to check a property of type String -> IO Bool. Using unsafePerformIO seems straightforward (though I haven't written the code, so I may be wrong about that) and it might be possible to make a solution involving unsafeInterleaveIO work. Short of rewriting QuickCheck, is there any way to check IO code "safely"? Barring that, I suspect it's possible modify QuickCheck to accommodate IO code (or perhaps, general monadic code). Has anyone done this? thanks -m

Mike Gunter wrote:
I'd like to use QuickCheck on IO code. For instance, I'd like to check a property of type String -> IO Bool.
Using unsafePerformIO seems straightforward (though I haven't written the code, so I may be wrong about that) and it might be possible to make a solution involving unsafeInterleaveIO work. Short of rewriting QuickCheck, is there any way to check IO code "safely"?
To use QuickCheck on IO you would need an instance of Arbitrary that can generate arbitrary states of the world :) If you ignore that you could, for example, make tests that depends on some files existing outside the program. To me that sounds like a bad idea, or at least outside the realm of QuickCheck. Twan

Mike Gunter
I'd like to use QuickCheck on IO code. For instance, I'd like to check a property of type String -> IO Bool.
Barring that, I suspect it's possible modify QuickCheck to accommodate IO code (or perhaps, general monadic code). Has anyone done this?
Yes, the original authors have. See: "Testing Monadic Code with QuickCheck" Koen Claessen and John Hughes Haskell Workshop 2002 Regards, Malcolm

I found the code at:
http://www.cs.chalmers.se/~rjmh/QuickCheck/QuickCheckM.hs
The only deconstructor there for PropertyM requires a "run" function
of type m Property -> Property. For IO, run is unsafePerformIO.
-m
Malcolm Wallace
Mike Gunter
wrote: I'd like to use QuickCheck on IO code. For instance, I'd like to check a property of type String -> IO Bool.
Barring that, I suspect it's possible modify QuickCheck to accommodate IO code (or perhaps, general monadic code). Has anyone done this?
Yes, the original authors have. See:
"Testing Monadic Code with QuickCheck" Koen Claessen and John Hughes Haskell Workshop 2002
Regards, Malcolm _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
participants (3)
-
Malcolm Wallace
-
Mike Gunter
-
Twan van Laarhoven