Създаване на генератори от потребителски дефинирани типове данни в haskell

Имам нужда от някои предложения за това как мога да създам произволен генератор за типа данни Foo, така че списъкът с Boo никога да не е празен?

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

person dfj328    schedule 13.04.2015    source източник


Отговори (1)


Можете да използвате функцията listOf1, за да получите генератор, който генерира непразни списъци и да го използвате за дефиниране на подходящ екземпляр Arbitrary, като:

import Test.QuickCheck
import Control.Applicative

instance Arbitrary Boo

instance Arbitrary Foo where
  arbitrary = Foo <$> arbitrary <*> arbitrary <*> arbitrary <*> listOf1 arbitrary
person Frerich Raabe    schedule 13.04.2015