QuickCheck limit to only certain data constructor

McB*_*den 2 haskell

I have a data type definition:

data Point = Point {x :: Int, h :: Int} | EmptyPoint
Run Code Online (Sandbox Code Playgroud)

In my property test, I would like to limit the test only on the Point constructor cases. For example point1 - point2 = Point 0 0. This presumes that the accessor x is defined which is not the case with EmptyPoint.

in other words: I don't want EmptyPoint to be generated.

Is there a way to do that?

Fyo*_*kin 5

Instead of automatically deriving the Arbitrary class for your type (which is what, I assume, you're doing at the moment), you can just write one manually and make it generate your points however you want, for example:

instance Arbitrary Point where
    arbitrary = Point <$> arbitrary <*> arbitrary
Run Code Online (Sandbox Code Playgroud)

Or in a slightly more verbose way if you like:

instance Arbitrary Point where
    arbitrary = do
        x <- arbitrary
        y <- arbitrary
        pure Point { x, y }
Run Code Online (Sandbox Code Playgroud)