7

假设,我想在 Haskell中的刺猬Sum库的帮助下测试以下关联属性:

a <> (b <> c) ≡ (a <> b) <> c

我实际上有两种生成随机输入的方法。

1. 全部生成Gen(使用GenApplicative 和 Monad 实例)

genTriple :: Get (Int, Int, Int)
genTriple = liftA3 (,,) Gen.enumBounded Gen.enumBounded Gen.enumBounded

prop_assoc :: Property
prop_assoc = property $ do
  (a, b, c) <- forAll genTriple
  (Sum a <> Sum b) <> Sum c === Sum a <> (Sum b <> Sum c)

2.生成下的每个字段forAll

prop_assoc :: Property
prop_assoc = property $ do
  a <- forAll Gen.enumBounded
  b <- forAll Gen.enumBounded
  c <- forAll Gen.enumBounded
  (Sum a <> Sum b) <> Sum c === Sum a <> (Sum b <> Sum c)

我想知道,两种方法有什么区别?它是否会以某种方式影响性能、并行化或随机性?

4

1 回答 1

0

包维护者在相应的 GitHub 问题下回答了这个问题:

于 2018-04-16T19:30:57.793 回答