Benja Fallenstein wrote: > Hi Dominic, > > > myRandomR :: (Foo, Foo) -> MyGen -> (Foo, MyGen) > > but you need > > randomR :: RandomGen g => (Foo, Foo) -> g -> (Foo, g) > > i.e., the function is required to be more generic than the one you provide. >
Thank you - obvious in hindsight. > The good news is that you don't need to declare Foo at all. You only > need to declare an instance of Random if you want to generate random > *values* of some new type. If you just want numbers, remove all the > stuff about Foo and call (for example) > > randomR (0,5) $ MyGen 18 > > and it'll give you a number and a new MyGen. But don't I need something in class Random so that I can use choose? > choose :: forall a. (Random a) => (a, a) -> Gen a Actually, looking in QuickCheck, I can see this approach is not going to work as QuickCheck always picks the StdGen instance of RandomGen :-( > choose :: Random a => (a, a) -> Gen a > choose bounds = (fst . randomR bounds) `fmap` rand > rand :: Gen StdGen > rand = Gen (\n r -> r) Does anyone have any ideas on a way to force QuickCheck to use a different generator of random values? Thanks, Dominic. _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
