从haskell中的用户定义数据类型创建生成器

时间:2015-04-13 11:42:52

标签: haskell functional-programming generator quickcheck

我需要一些关于如何为Foo数据类型创建随机生成器的建议,以便Boo列表永远不会为空?

data Boo = Boo Float Float Float
data Foo = Foo Float Float Float [Boo]

1 个答案:

答案 0 :(得分:7)

您可以使用listOf1函数来获取生成非空列表的生成器,并将其用于定义适当的Arbitrary实例,例如:

import Test.QuickCheck
import Control.Applicative

instance Arbitrary Boo

instance Arbitrary Foo where
  arbitrary = Foo <$> arbitrary <*> arbitrary <*> arbitrary <*> listOf1 arbitrary