diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 https://github.com/Lysxia/generic-random/blob/master/changelog.md
 
+# 1.3.0.1
+
+- Fix small typos in documentation.
+
 # 1.3.0.0
 
 - Add `ConstrGen` (custom generators for fields specified by constructor name
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,9 +1,10 @@
 Generic random generators [![Hackage](https://img.shields.io/hackage/v/generic-random.svg)](https://hackage.haskell.org/package/generic-random) [![Build Status](https://travis-ci.org/Lysxia/generic-random.svg)](https://travis-ci.org/Lysxia/generic-random)
 =========================
 
-Derive simple random generators for [QuickCheck](https://hackage.haskell.org/package/QuickCheck) using generics.
+Generic random generators
+to implement `Arbitrary` instances for [QuickCheck](https://hackage.haskell.org/package/QuickCheck)
 
-Automating the `Arbitrary` boilerplate also ensures that when a type changes to
+Automating the `arbitrary` boilerplate also ensures that when a type changes to
 have more or fewer constructors, then the generator either fixes itself to
 generate that new case (when using the `uniform` distribution) or causes a
 compilation error so you remember to fix it (when using an explicit
@@ -47,3 +48,18 @@
 main :: IO ()
 main = sample (arbitrary :: Gen (Tree ()))
 ```
+
+Related
+-------
+
+- The following two packages also derive random generators, but only with a uniform
+  distribution of constructors:
+
+    + [quickcheck-arbitrary-template](https://hackage.haskell.org/package/quickcheck-arbitrary-template) (TH)
+    + [generic-arbitrary](https://hackage.haskell.org/package/generic-arbitrary-0.1.0) (GHC Generics)
+
+- [testing-feat](http://hackage.haskell.org/package/testing-feat):
+  derive enumerations for algebraic data types, which can be turned into random generators (TH).
+
+- [boltzmann-samplers](https://hackage.haskell.org/package/boltzmann-samplers):
+  derive Boltzmann samplers (SYB).
diff --git a/generic-random.cabal b/generic-random.cabal
--- a/generic-random.cabal
+++ b/generic-random.cabal
@@ -1,9 +1,14 @@
 name:                generic-random
-version:             1.3.0.0
-synopsis:            Generic random generators
+version:             1.3.0.1
+synopsis:            Generic random generators for QuickCheck
 description:
+    Derive instances of @Arbitrary@ for QuickCheck,
+    with various options to customize implementations.
+    .
     For more information
     .
+    - See the README
+    .
     - "Generic.Random.Tutorial"
     .
     - http://blog.poisson.chat/posts/2018-01-05-generic-random-tour.html
@@ -11,7 +16,7 @@
 homepage:            http://github.com/lysxia/generic-random
 license:             MIT
 license-file:        LICENSE
-stability:           Experimental
+stability:           Stable
 author:              Li-yao Xia
 maintainer:          lysxia@gmail.com
 category:            Generics, Testing
@@ -38,12 +43,25 @@
   location: https://github.com/lysxia/generic-random
 
 test-suite unit
-  Hs-source-dirs:  test
-  Main-is:         Unit.hs
-  Build-depends:
-      base,
-      deepseq,
-      QuickCheck,
-      generic-random
-  Type: exitcode-stdio-1.0
-  Default-language: Haskell2010
+  hs-source-dirs:  test
+  main-is:         Unit.hs
+  build-depends:
+    base,
+    deepseq,
+    QuickCheck,
+    generic-random
+  type: exitcode-stdio-1.0
+  default-language: Haskell2010
+
+test-suite inspect
+  hs-source-dirs:  test
+  main-is:         Inspect.hs
+  build-depends:
+    base,
+    QuickCheck,
+    inspection-testing,
+    generic-random
+  type: exitcode-stdio-1.0
+  default-language: Haskell2010
+  if !impl(ghc >= 8.0.2)
+    buildable: False
diff --git a/src/Generic/Random/Internal/Generic.hs b/src/Generic/Random/Internal/Generic.hs
--- a/src/Generic/Random/Internal/Generic.hs
+++ b/src/Generic/Random/Internal/Generic.hs
@@ -113,14 +113,13 @@
 -- customGens :: Gen String ':+' Gen Int
 -- customGens =
 --   (filter (/= '\NUL') '<$>' arbitrary) ':+'
---   (getNonNegative '<$>' arbitrary) ':+'
---   ()
+--   (getNonNegative '<$>' arbitrary)
 -- @
 --
 -- === Note on multiple matches
 --
 -- If the list contains multiple matching types for a field @x@ of type @a@
--- (i.e., either @a@ or @'FieldGen' "x" a@), the generator for the first
+-- (i.e., either @Gen a@ or @'FieldGen' "x" a@), the generator for the first
 -- match will be picked.
 genericArbitraryG
   :: (GArbitrary (SetGens genList UnsizedOpts) a)
@@ -527,6 +526,7 @@
 -- > ---------------------+-----------------------------
 -- >          (),      () | END
 -- >          (), g :+ gs | g, gs
+-- >          (),      g  | g, () when g is not (_ :+ _)
 -- >      g :+ h,      gs | g, h :+ gs
 -- >       Gen a,      gs | END if matching, else (), gs
 -- >  FieldGen a,      gs | idem
diff --git a/src/Generic/Random/Tutorial.hs b/src/Generic/Random/Tutorial.hs
--- a/src/Generic/Random/Tutorial.hs
+++ b/src/Generic/Random/Tutorial.hs
@@ -19,11 +19,13 @@
 --   arbitrary = 'genericArbitrary' (9 '%' 8 '%' ())
 -- @
 --
--- @arbitrary :: 'Test.QuickCheck.Gen' (Tree a)@ picks a @Leaf@ with probability 9\/17, or a
+-- That random generator @arbitrary :: 'Test.QuickCheck.Gen' (Tree a)@ picks a
+-- @Leaf@ with probability 9\/17, or a
 -- @Node@ with probability 8\/17, and recursively fills their fields with
 -- @arbitrary@.
 --
--- For @Tree@, 'genericArbitrary' produces code equivalent to the following:
+-- For @Tree@, the generic implementation 'genericArbitrary' is equivalent to
+-- the following:
 --
 -- @
 -- 'genericArbitrary' :: Arbitrary a => 'Weights' (Tree a) -> Gen (Tree a)
@@ -43,7 +45,7 @@
 --
 -- The list of weights is built up with the @('%')@ operator as a cons, and using
 -- the unit @()@ as the empty list, in the order corresponding to the data type
--- definition. The uniform distribution can be obtained with 'uniform'.
+-- definition.
 --
 -- == Uniform distribution
 --
diff --git a/test/Inspect.hs b/test/Inspect.hs
new file mode 100644
--- /dev/null
+++ b/test/Inspect.hs
@@ -0,0 +1,46 @@
+{-# LANGUAGE
+    DeriveGeneric,
+    TemplateHaskell
+  #-}
+
+
+import GHC.Generics (Generic)
+import Test.QuickCheck (Arbitrary(arbitrary), Gen, choose)
+
+import Test.Inspection (inspect, (===))
+
+import Generic.Random
+
+arbMaybe :: Arbitrary a => Gen (Maybe a)
+arbMaybe = genericArbitraryU
+
+arbMaybe' :: Arbitrary a => Gen (Maybe a)
+arbMaybe' = do
+  i <- choose (0, 1 :: Int)
+  if i < 1 then
+    pure Nothing
+  else
+    Just <$> arbitrary
+
+data T = A | B | C Int [Bool]
+  deriving Generic
+
+arbT :: Gen T
+arbT = genericArbitrary (1 % 2 % 3 % ())
+
+arbT' :: Gen T
+arbT' = do
+  i <- choose (0, 5 :: Int)
+  if i < 1 then
+    pure A
+  else
+    if i - 1 < 2 then
+      pure B
+    else
+      C <$> arbitrary <*> arbitrary
+
+main :: IO ()
+main = pure ()
+
+inspect $ 'arbMaybe === 'arbMaybe'
+inspect $ 'arbT === 'arbT'
