Quickcheck, Definieren beliebiger Instanzen mit einer Funktion, deren Ergebnis von ihren Argumenten abhängt

Ich habe eine FunktionarbExample um ein zufälliges @ zu generierExample Datentyp, der von einer Reihe von Funktionen abhängt.

Ich versuche, einige Eigenschaftstests durchzuführen, indem ichquickCheck prop_example, das Problem ist, ich weiß nicht, wie man ein @ definieArbitrary Instanz fürExample welches verwendetarbExample.

Ich möchte in der Lage sein, laufenquickCheck prop_example bei der Angabe desGens Datenstruktur welchearbExample Verwendet

data Example = Example
    { myInt  :: Int 
    , myList :: [String]
    } deriving (Show)

data Gens =  Gens
    { gen1 :: Gen Int
    , gen2 :: Gen String }

arbExample :: Gens -> Gen Example
arbExample gens = do 
    i  <- gen1 gens 
    xs <- vectorOf i (gen2 gens)
    return Example{myInt=i, myList=xs}

prop_example :: Example -> Property
prop_example example =  do
    let len = length (myList example) 
    monadicIO $ do 
        -- result of running some program
        successful <- run $ (\e -> return False) example  
        case successful of
            True  -> return ()
            False -> fail "failure "

instance Arbitrary Example where
    arbitrary =  arbExample _ {- ??? -}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage