diff --git a/QuickCheckVariant.cabal b/QuickCheckVariant.cabal
--- a/QuickCheckVariant.cabal
+++ b/QuickCheckVariant.cabal
@@ -2,7 +2,7 @@
 -- PVP summary:      +-+------- breaking API changes
 --                   | | +----- non-breaking API additions
 --                   | | | +--- code changes with no API change
-version:             0.1.0.4
+version:             0.1.1.0
 synopsis:            Generator of "valid" and "invalid" data in a type class
 description:         Generator of "valid" and "invalid" data in a type class
 homepage:            https://github.com/sanjorgek/QuickCheckVariant
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,4 +1,26 @@
 # QuickCheckVariant
 Generator of "valid" and "invalid" data in a type class
 
+For example, if you created
+~~~haskell
+data Person = Anonymous { getId::String } | Client { getUsername::String, getName::String, getEmail::String} deriving(Show,Eq)
+~~~
+
+We can provide means to generate valid and invalid data, like:
+~~~haskell
+instance Variant Person where
+  valid = do
+    id <- alternative
+    username <- alternative
+    name <- alternative
+    domain <- alternative
+    ext <- alternative
+    (oneof . return) [Anonymous id, Client username name (username++"@"++domain++ext)]
+  invalid = do
+    username <- alternative
+    name <- alternative
+    return $ Client username name ""
+
+~~~ 
+
 See [this post](https://wiki.haskell.org/QuickCheck_as_a_test_set_generator) for more details
diff --git a/src/Test/QuickCheck/Variant.hs b/src/Test/QuickCheck/Variant.hs
--- a/src/Test/QuickCheck/Variant.hs
+++ b/src/Test/QuickCheck/Variant.hs
@@ -109,3 +109,26 @@
     y <- valid
     z <- valid    
     return (x, y, z)
+
+{-|
+The class of things wich can be tested with invalid or valid input.
+-}
+class VarTesteable prop where
+  -- |Property for valid input
+  propertyValid::prop -> Property
+  -- |Property for invalid input  
+  propertyInvalid::prop -> Property
+
+{-|
+Same as Testeable
+-}
+instance VarTesteable Bool where
+  propertyValid = property
+  propertyInvalid = property
+
+{-|
+Instead of variant we use valid or invalid generators
+-}
+instance (Arbitrary a, Variant a, Show a, Testable prop) => VarTesteable (a->prop) where
+  propertyValid = forAllShrink valid shrink
+  propertyInvalid = forAllShrink invalid shrink
