是否有与QuickCheck一起使用的Monadic版本的Arbitrary?

jul*_*icz 9 testing monads haskell functional-programming quickcheck

当我想测试纯代码时,QuickCheck我经常要写一个Arbitrary实例.要测试monadic代码,我可以Test.QuickCheck.Monadic按照本文所述使用.

我的问题是:是否有一些规范的方法来生成依赖于monadic上下文的数据?特别是,有任何monadic版本的任意?您将如何生成需要monadic上下文的数据?

Lou*_*man 6

Gen基本上是你用来处理Arbitrarymonad框架中的实例,因为Arbitrary类型类基本上只是Gen a生成器的提供者.


Dan*_*ton 3

随机生成上下文

只需生成适当的随机一元上下文即可。如果你正在运行测试,你不能停留在纯粹想象的单子领域,你实际上必须选择一个特定的单子来测试。你选择了一个单子列表吗?随机生成一个列表作为上下文。状态单子?随机生成上下文的状态类型值。作家?随机生成一条日志。

随机生成一个动作

那么你到底想生成什么?如果它是一个单子动作,那么您需要提供一种根据其独特的原语为您的特定单子生成单子动作的方法。get例如,随机生成的状态动作应该从状态原语和中随机构造put

把它们放在一起

如果您使用 QuickCheck 的功能来生成一个f生成单子操作的函数,并使用 QuickCheck 生成一个 context c,那么您可以简单地c >>= f将它们放在一起。或者您可以直接生成操作a,然后执行c >> a.