diff --git a/Data/HList/Data.hs b/Data/HList/Data.hs
--- a/Data/HList/Data.hs
+++ b/Data/HList/Data.hs
@@ -70,6 +70,8 @@
 import Data.HList.TIC
 import Data.HList.TIP
 
+-- for Typeable '[] and Typeable '(:) with ghc-7.6
+import Data.Orphans ()
 
 #if OLD_TYPEABLE
 import Data.List
@@ -232,11 +234,6 @@
 -- orphans
 deriving instance Typeable 'HZero
 deriving instance Typeable 'HSucc
-#if !MIN_VERSION_base(4,8,0)
--- GHC 7.9 adds these instances
-deriving instance Typeable '[]
-deriving instance Typeable '(:)
-#endif
 
 #else
 instance TypeRepsList (Record xs) => Typeable (HList xs) where
diff --git a/Data/HList/HList.hs b/Data/HList/HList.hs
--- a/Data/HList/HList.hs
+++ b/Data/HList/HList.hs
@@ -641,7 +641,7 @@
 >>> let a = hEnd $ hBuild 1 2 3
 >>> let b = hEnd $ hBuild 'a' "abc"
 >>> hConcat $ hBuild a b
-H[1, 2, 3, 'a', "abc"]
+H[1,2,3,'a',"abc"]
 
 -}
 type HConcat xs = HConcatFD xs (HConcatR xs)
diff --git a/Data/HList/Record.hs b/Data/HList/Record.hs
--- a/Data/HList/Record.hs
+++ b/Data/HList/Record.hs
@@ -1143,7 +1143,7 @@
 >>> let circSucc_ x | x == maxBound = minBound | otherwise = succ x
 
 >>> :t circSucc_
-circSucc_ :: (Eq a, Enum a, Bounded a) => a -> a
+circSucc_ :: (Bounded a, Enum a, Eq a) => a -> a
 
 Use a shortcut ('Fun') to create a value that has an appropriate 'ApplyAB' instance:
 
@@ -1182,7 +1182,7 @@
 
 
 -- --------------------------------------------------------------------------
--- | This instance allows creating Record with
+-- | This instance allows creating a Record with
 --
 -- @hBuild 3 'a' :: Record '[Tagged "x" Int, Tagged "y" Char]@
 instance (HReverse l lRev,
diff --git a/Data/HList/TIP.hs b/Data/HList/TIP.hs
--- a/Data/HList/TIP.hs
+++ b/Data/HList/TIP.hs
@@ -467,7 +467,10 @@
 [@Session log@]
 
 >>> :t myTipyCow
-myTipyCow :: TIP Animal
+myTipyCow
+  :: TIP
+       '[Tagged Key Key, Tagged Name Name, Tagged Breed Breed,
+         Tagged Price Price]
 
 >>> hOccurs myTipyCow :: Breed
 Cow
diff --git a/HList.cabal b/HList.cabal
--- a/HList.cabal
+++ b/HList.cabal
@@ -1,5 +1,5 @@
 Name:                HList
-Version:             0.4.1.0
+Version:             0.4.2.0
 Category:            Data
 Synopsis:            Heterogeneous lists
 Description:         HList provides many operations to create and manipulate
@@ -22,7 +22,7 @@
 
 Data-files:          README, ChangeLog
 Cabal-version:       >= 1.10
-Tested-With:         GHC==7.6.3, GHC==7.8.4, GHC==7.10.1
+Tested-With:         GHC==7.6.3, GHC==7.8.4, GHC==7.10.2
 Build-Type:          Simple
 
 Extra-Source-Files:
@@ -56,6 +56,8 @@
 
 library
   Build-Depends:       base >= 4.6 && < 4.9,
+                       -- for Typeable '[] and '(:) with ghc-7.6
+                       base-orphans,
                        template-haskell,
                        ghc-prim,
                        mtl,
@@ -140,6 +142,8 @@
   Hs-Source-Dirs:  examples
   Build-Depends:       base, hspec >= 1.7, directory, filepath,
                        process, syb, cmdargs, lens, HList, mtl
+  if impl(ghc > 7.9)
+    Ghc-Options: -fno-warn-tabs
 
 Test-Suite doctests
   Type:     exitcode-stdio-1.0
diff --git a/examples/Properties/LengthDependent.hs b/examples/Properties/LengthDependent.hs
--- a/examples/Properties/LengthDependent.hs
+++ b/examples/Properties/LengthDependent.hs
@@ -270,20 +270,38 @@
       return $ hZip x y `eq` hZip2 x y
 #endif
 
-  it "HList monoid assoc" $
-    property $ do
-      x <- genHL (BoolN True :: BoolN "x")
-      y <- genHL (BoolN True :: BoolN "x")
-      z <- genHL (BoolN True :: BoolN "x")
-      return $ ((x `mappend` y) `mappend` z) `eq` (x `mappend` (y `mappend` z))
-
+  -- lots of duplication, not sure if it's worth factoring out
   it "HList monoid unit" $
     property $ do
       x <- genHL (BoolN True :: BoolN "x")
       return $ conjoin
         [ x === (x `mappend` mempty),
           x === (mempty `mappend` x) ]
+  it "Record monoid unit" $
+    property $ do
+      x <- $(rN n1) (BoolN True :: BoolN "x")
+      return $ conjoin
+        [ x === (x `mappend` mempty),
+          x === (mempty `mappend` x) ]
+  it "Variant monoid unit" $
+    property $ do
+      x <- $(rN n1) (BoolN True :: BoolN "x")
+      return $ conjoin
+        [ x === (x `mappend` mempty),
+          x === (mempty `mappend` x) ]
 
+  -- lots of duplication, not sure if it's worth factoring out
+  it "HList monoid assoc" $
+    property $ do
+      x <- genHL (BoolN True :: BoolN "x")
+      y <- genHL (BoolN True :: BoolN "x")
+      z <- genHL (BoolN True :: BoolN "x")
+      return $ ((x `mappend` y) `mappend` z) `eq` (x `mappend` (y `mappend` z))
+  it "Record monoid assoc" $ property $ do
+    x <- $(rN n1) (BoolN True :: BoolN "x")
+    y <- $(rN n1) (BoolN True :: BoolN "x")
+    z <- $(rN n1) (BoolN True :: BoolN "x")
+    return $ ((x `mappend` y) `mappend` z) `eq` (x `mappend` (y `mappend` z))
   it "Variant monoid assoc" $ property $ do
     x <- $(vN n1) (BoolN True :: BoolN "x")
     y <- $(vN n1) (BoolN True :: BoolN "x")
