Testing 是否有可与QuickCheck一起使用的Arbital的一元版本?

Testing 是否有可与QuickCheck一起使用的Arbital的一元版本?,testing,haskell,functional-programming,monads,quickcheck,Testing,Haskell,Functional Programming,Monads,Quickcheck,当我想使用QuickCheck测试纯代码时,我通常需要编写一个任意的实例。要测试一元代码,我可以使用test.QuickCheck.monadic,如本文所述 我的问题是:是否有一些规范的方法来生成依赖于一元上下文的数据?特别是,是否有一些独裁者的版本?如何生成需要一元上下文的数据?Gen基本上就是在monad框架中处理任意实例的工具,因为任意类型类基本上只是Gen a生成器的提供者。随机生成上下文 只需生成一个适当的随机一元上下文。如果你正在运行测试,你不能停留在纯粹想象中的单子世界,你实际上

当我想使用
QuickCheck
测试纯代码时,我通常需要编写一个
任意的
实例。要测试一元代码,我可以使用
test.QuickCheck.monadic
,如本文所述


我的问题是:是否有一些规范的方法来生成依赖于一元上下文的数据?特别是,是否有一些独裁者的版本?如何生成需要一元上下文的数据?

Gen
基本上就是在monad框架中处理
任意
实例的工具,因为
任意
类型类基本上只是
Gen a
生成器的提供者。

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

随机生成一个动作 那么你到底想要生成什么呢?如果它是一个单子动作,那么您需要提供一种基于其唯一原语为您的特定单子生成单子动作的方法。e、 g.随机生成的状态操作应根据状态原语
get
put
随机构造

把它们放在一起 如果使用QuickCheck的功能生成生成生成一元操作的函数
f
,并使用QuickCheck生成上下文
c
,则可以简单地将它们组合在一起。或者您可以直接生成动作
a
,然后执行
c>>a