[Haskell-cafe] A Random Question

Paul Johnson paul at cogito.org.uk
Sat Dec 15 09:38:19 EST 2007


Dominic Steinitz wrote:
> I want to say something like:
>
> instance Arbitrary Foo where
>    arbitrary = choose (Foo 1, Foo 5)
>
> but the "random" values are generated by my own random number generator
> not the standard one.
>
> Does that make sense? The reason I'm trying to do this is I am
> generating random test data but some of it needs to be predictable
It makes sense, but its not possible.  The "generate" function has the type:

*generate* :: Int 
<http://www.haskell.org/ghc/docs/latest/html/libraries/base/Data-Int.html#t%3AInt> 
-> StdGen 
<http://www.haskell.org/ghc/docs/latest/html/libraries/random/System-Random.html#t%3AStdGen> 
-> Gen 
<http://www.haskell.org/ghc/docs/latest/html/libraries/QuickCheck/Test-QuickCheck.html#t%3AGen> 
a -> a

Unfortunately for your purpose you would need:

*generate* :: (RandomGen g) => Int 
<http://www.haskell.org/ghc/docs/latest/html/libraries/base/Data-Int.html#t%3AInt> 
-> g -> Gen 
<http://www.haskell.org/ghc/docs/latest/html/libraries/QuickCheck/Test-QuickCheck.html#t%3AGen> 
a -> a

Take a look at SmallCheck.  It might be more suited to your requirement 
anyway.

Paul.



More information about the Haskell-Cafe mailing list