-2

quickCheckResult のみを受け入れsomething -> Bool、次にいくつかの例を模倣して、合格します

[Colour] -> Bool

[色]のブラケットの機能は何ですか? なぜColour -> Boolですか?任意のインスタンスを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

解析エラー (インデントが正しくない可能性があります)

4

2 に答える 2

2

わかりました。おそらくこれを別々の質問に分割する必要があります。

[色]があるということは、関数が色のリストをパラメーターとして受け入れることを意味します。

任意の関数はすでにquickCheckによって実行されています。インスタンスを渡す必要はありません。

3の問題は、letバインディングにあります。Letバインディングは、ローカルスコープに新しいバインディングを導入するために使用されますが、これはローカルスコープで定義しているため、letは使用しません。

import Test.QuickCheck.Function
prop :: Fun Fun Integer -> Bool
prop (Fun _ f) (Fun _ g) = (g.f) x == (f.g) x 
quickCheck prop
于 2011-11-18T08:11:47.423 に答える
1

タイプ[Colour]は のリストですColour

于 2011-11-18T08:07:37.540 に答える