quickCheckResult只接受something -> Bool
,然后我模仿一些例子,
传递
[Colour] -> Bool
[颜色]括号的功能是什么?为什么不Colour -> Bool
?
如何将Arbitrary实例传递给quickCheckResult?
data Colour = Green | Blue
instance Arbitrary Colour where
arbitrary = oneof [return Green, return Blue]
main = quickCheckResult ((\s -> s == s) :: [Colour] -> Bool)
[更新] 我的目标是以下可以运行
import Test.QuickCheck.Function
import Test.QuickCheck.Gen
import Test.QuickCheck
import Test.QuickCheck.Function
import Test.QuickCheck.Arbitrary
import Test.QuickCheck.Property
import Test.QuickCheck.Test
prop1 f g x = (g.f) x == (f.g) x where types = [f, g] :: [Int->Int]
instance CoArbitrary ex where
coarbitrary f g = prop1 (variant 0 f) (variant 0 g)
main = quickCheck prop1
test5.hs:11:10:
Illegal instance declaration for `CoArbitrary ex'
(All instance types must be of the form (T a1 ... an)
where a1 ... an are *distinct type variables*,
and each type variable appears at most once in the instance head.
Use -XFlexibleInstances if you want to disable this.)
In the instance declaration for `CoArbitrary ex'
3.如何使用QuickCheck.Function(更新)
prop :: Fun Fun Integer -> Bool
let prop (Fun _ f) (Fun _ g) = (g.f) x == (f.g) x
quickCheck prop
解析错误(可能是错误的缩进)
答案 0 :(得分:2)
好的,你应该把它分成不同的问题。
[Color]表示该函数接受Color列表作为参数。
任意功能已由quickCheck执行。没有必要传递实例。
3的问题在于你的let绑定。让绑定用于将新绑定引入本地范围,但是,您在本地范围内定义它,因此不要使用let。
import Test.QuickCheck.Function
prop :: Fun Fun Integer -> Bool
prop (Fun _ f) (Fun _ g) = (g.f) x == (f.g) x
quickCheck prop
答案 1 :(得分:1)
类型[Colour]
是Colour
的列表。