1. What is ex that should be pass to CoArbitrary of the following code?
2. How to use Function in Test.QuickCheck.Function to represent f and g in proposition?
3. is it correct to write , if not, how?

where types = [f, g] :: [Function]
4. Can variant accept Function ? as i know generate function often use >< or variant which stated in the source code of QuickCheck

The error:

```
<interactive>:1:12:
    No instance for (Eq (b0 -> b0))
      arising from a use of `prop_commutative'
    Possible fix: add an instance declaration for (Eq (b0 -> b0))
    In the first argument of `quickCheck', namely `prop_commutative'
    In the expression: quickCheck prop_commutative
    In an equation for `it': it = quickCheck prop_commutative

```

[Updated] 

but it is not implemented CoArbitrary <http://www.google.com.hk/url?sa=t&rct=j&q=QuickCheck+meiser.pdf&source=web&cd=1&ved=0CBwQFjAA&url=http%3A%2F%2Fwww.st.cs.uni-saarland.de%2Fedu%2Fseminare%2F2005%2Fadvanced-fp%2Fslides%2Fmeiser.pdf&ei=hhfHTo_ZDdCciAethMjqDw&usg=AFQjCNFF467CXacWGMkN8jvgqatkcLcVcg>

Another writing mimic the example in Function, parse error at '=' 
in ghci `let prop_commutative (Fun _ f) (Fun _ g) = (f.g) == (g.f)` can run

The code:

```
import Test.QuickCheck.Function
import Test.QuickCheck.Gen
import Test.QuickCheck

let prop_commutative (Fun _ f) (Fun _ g) = (f.g) == (g.f)

main = quickCheck prop_commutative

```