Frage

Ich teste eine Funktion namens Extraktionen, die über jede Liste arbeitet.

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

Ich mag es testen, zum Beispiel mit

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

Aber das wird nicht kompilieren; Ich habe eine Art entweder für run oder prop_len zu liefern, weil Quick Check nicht [a] erzeugen kann, hat es etwas Konkretes zu erzeugen. Also wählte ich Int:

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

Gibt es eine Möglichkeit Quick Check zu bekommen a für mich zu wählen anstatt es in der Art der run angegeben?

War es hilfreich?

Lösung

Das Quick Check Handbuch sagt "nein":

  

Eigenschaften müssen monomorphic Typen haben. `Polymorphe‘ Eigenschaften wie die oben, muss auf einen bestimmten Typ beschränkt werden, um für die Prüfung verwendet werden. Es ist bequem, dies zu tun, indem sie die Art von einem oder mehr Argumenten in einer Angabe

     

Dabei gilt Typen = (x1 :: t1, x2 :: t2, ...)

     

Klausel ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top