ich beliebig großes Element für meinen benutzerdefinierten Datentyp zu erzeugen versuchen:Quick Check-Generator - beliebiges Element von benutzerdefiniertem Typ
newtype ZippList a = ZPL ([a], [a])
deriving (Show)
Das ist, was ich habe:
instance Arbitrary a => Arbitrary (ZippList a) where
arbitrary = sized zipplist where
zipplist n = do
firstLength <- choose(0,n)
secondLength <- n - firstLength
firstList <- [arbitrary :: Gen a | [1..firstLength]]
secondList <- [arbitrary :: Gen a | [1..secondLength]]
return $ ZPL (firstList, secondList)
aber es nicht kompilieren . Die Kompilierung schlägt fehl für die Generierung der beiden Listen von a. Wie kann ich ein beliebiges a erzeugen?
Verdammt, ich habe irgendwie vergessen, tatsächlich die Werte mit _ <-
zu generieren .. Sorry für die triviale Frage, ich codierte späten Stunden.
'Sequenz verwenden sollten [willkürliche | _ <- [1..firstLength]] sieht für mich wie "replicateM firstLength arbitrary" aus! – epsilonhalbe
@epsilonhalbe Ich bevorzuge auch Ihren Weg, aber die Comprehensions-Ansatz scheint idiomatische in Quickstart aus irgendeinem Grund zu sein, siehe https://www.schoolofhaskell.com/user/griba/quick-check-generator-of-pair-List- index-where-index-in-list-range – jamshidh
Verdammt, ich habe irgendwie vergessen, die Werte mit '_ <-'s zu erzeugen. Sorry für die triviale Frage, ich habe spät geschrieben. Danke für die Antwort trotzdem. – VSZM