Domanda

Sto testando una funzione chiamata estrazioni che opera su qualsiasi elenco.

extractions :: [a] -> [(a,[a])]
extractions [] = []
extractions l = extract l []
    where extract [] _ = []
          extract (x:xs) prev = (x, prev++xs) : extract xs (x : prev)

Voglio provarla, per esempio, con

import Test.QuickCheck.Batch    
prop_len l = length l == length (extractions l)
main = runTests "extractions" defOpt [run prop_len]

Ma questo non compilare;Ho per la fornitura di un tipo per run o prop_len, perché QuickCheck non può generare [a], essa ha per generare qualcosa di concreto.Così ho scelto Int:

main = runTests "extractions" defOpt [r prop_len]
    where r = run :: ([Int] -> Bool) -> TestOptions -> IO TestResult

C'è un modo per ottenere QuickCheck di scegliere a per me invece di averlo specificato nel tipo di run?

È stato utile?

Soluzione

Il quickcheck manuale dice "no":

Proprietà deve avere monomorfa tipi.`Polimorfici proprietà, come quella di cui sopra, deve essere limitata a un particolare tipo usato per il test.È conveniente fare così dichiarando i tipi di uno o più argomenti in un

dove types = (x1 ::t1, x2 ::t2, ...)

clausola...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top