Вопрос:
Приведите пример про coarbitrary из Test.QuickCheck. Как порождать случайные функции и как их использовать. Не получается понять как генерировать функции. Для просто arbitrary оно понятно:
Код:
import Data.Monoid
import Test.QuickCheck
myList' :: Arbitrary a => Gen [a]
myList' = frequency
[ (1, return [])
, (4, (:) <$> arbitrary <*> myList')
]
И можно генерировать случайные списки:
Код:
*Main Test.QuickCheck> sample myList'
[()]
[(),()]
[()]
[]
[(),()]
[(),(),(),(),(),(),(),(),(),(),()]
[(),(),(),(),(),(),()]
[]
[]
[(),(),(),(),()]
[]
А про coarbitrary?