说,我的数据类型: 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