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

dfj*_*328 2 haskell functional-programming generator quickcheck

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

data Boo = Boo Float Float Float
data Foo = Foo Float Float Float [Boo]
Run Code Online (Sandbox Code Playgroud)

Fre*_*abe 7

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

import Test.QuickCheck
import Control.Applicative

instance Arbitrary Boo

instance Arbitrary Foo where
  arbitrary = Foo <$> arbitrary <*> arbitrary <*> arbitrary <*> listOf1 arbitrary
Run Code Online (Sandbox Code Playgroud)