
Ahn, Ki Yung schrieb:
Often times QuickCheck properties are polymophic/overloaded without giving a monomorphic type signature. But there can be several types that you are interested. You can write scripts that check all the types you are interested annotating the generic property for each different monotype, which is a tedious work to do. Here, I automated this via hint (a Haskell Interpreter Library). How it works is it first asks a type of a property to the Haskell interpreter and gets a type string, identifies type variables that start with lowercase alphabet, generate all possible substitution that may or may not be a correct type, stick the type string to the property name as a signature and collect only the meaningful types, and then finally run quickCheck over each meaningful types. The example below clearly illustrates what it does.
Maybe you could write a block of quickCheck tests, that shall be run on different types. tests :: a -> IO () tests x = do quickCheck (\y -> law1 (y `asTypeOf x)) ... allTests = tests (undefined :: Int) tests (undefined :: Double)