說,我的數據類型: data A = A1 | A2 | A3
data B = B1 A | B2 A
我可以很容易地生成的我想測試所有可能的排列B的所有可能性的列表,但我仍然想使用QuickCheck來將它應用的列表中的所有元素吐出。在這種情況下,我想測試一個規則適用於所有可能性,所以我不想生成隨機數據。 假設我已經有了列表中的所有可能性,怎樣才能讓QuickCheck輸出列表中的每個元
我試圖解決與"Haskell Programming from First Principles"第15章中的this other question相同的練習。我已經創建了一個Semigroup實例,並且在編寫練習的QuickCheck部分時遇到了麻煩。 半羣實例應該滿足: a <> (b <> c) == (a <> b) <> c
<>哪裏是半羣mappend。 我想出了以下內容: imp
data Edge v = Edge {source :: v, target :: v}
deriving (Show,Eq,Ord)
data Graph v = Graph {nodes :: Set v, edges :: Set (Edge v)}
deriving Show
instance Arbitrary v => Arbitrary (Ed
我試圖生成任意大小的元素爲我的自定義數據類型的任意元素: newtype ZippList a = ZPL ([a], [a])
deriving (Show)
這是我得到: instance Arbitrary a => Arbitrary (ZippList a) where
arbitrary = sized zipplist where
zipplist n =
考慮從一組可能的字符串中生成字符串的問題,這樣一旦選擇字符串,就不能再次重複。對於這個任務,我想使用QuickCheck的Gen函數。 如果我看看我正在編寫的函數的類型,它看起來非常像狀態monad。由於我正在使用另一個monad,即Gen,在州monad中。我使用StateT寫了我的第一次嘗試。 arbitraryStringS :: StateT GenState Gen String
ar