diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+# 0.6.0.1
+
+- Fix derivation of `Show1` for `(:.:)`
+
 # 0.6.0.0
 
 - Add `Surgery` newtype for DerivingVia
diff --git a/generic-data.cabal b/generic-data.cabal
--- a/generic-data.cabal
+++ b/generic-data.cabal
@@ -1,5 +1,5 @@
 name:                generic-data
-version:             0.6.0.0
+version:             0.6.0.1
 synopsis:            Deriving instances with GHC.Generics and related utilities
 description:
   Generic implementations of standard type classes.
@@ -116,6 +116,20 @@
   ghc-options: -Wall
   default-language: Haskell2010
   type: exitcode-stdio-1.0
+
+benchmark bench
+  hs-source-dirs: test
+  main-is: bench.hs
+  build-depends:
+    criterion,
+    deepseq,
+    generic-data,
+    base
+  ghc-options: -Wall
+  default-language: Haskell2010
+  type: exitcode-stdio-1.0
+  if !impl(ghc >= 8.6)
+    buildable: False
 
 source-repository head
   type:     git
diff --git a/src/Generic/Data/Internal/Show.hs b/src/Generic/Data/Internal/Show.hs
--- a/src/Generic/Data/Internal/Show.hs
+++ b/src/Generic/Data/Internal/Show.hs
@@ -125,10 +125,10 @@
 instance GShowSingle Identity Par1 where
   gPrecShowsSingle (Identity (showsPrec', _)) (Par1 a) = flip showsPrec' a
 
-instance (GShowSingle Identity f, GShowSingle p g)
+instance (Show1 f, GShowSingle p g)
   => GShowSingle p (f :.: g) where
   gPrecShowsSingle p (Comp1 c) =
-    gPrecShowsSingle (Identity (showsPrec_, showList_)) c
+      flip (liftShowsPrec showsPrec_ showList_) c
     where
       showsPrec_ = flip (gPrecShowsSingle p)
       showList_ = showListWith (showsPrec_ 0)
diff --git a/test/bench.hs b/test/bench.hs
new file mode 100644
--- /dev/null
+++ b/test/bench.hs
@@ -0,0 +1,69 @@
+{-# LANGUAGE
+    DeriveAnyClass,
+    DeriveGeneric,
+    DerivingVia,
+    DerivingStrategies,
+    FlexibleInstances,
+    ScopedTypeVariables,
+    StandaloneDeriving,
+    TypeApplications
+  #-}
+
+import Data.Semigroup (Sum(..))
+import GHC.Generics (Generic)
+import Text.Show (showParen, showString)
+
+import Control.DeepSeq
+import Criterion.Main
+
+import Generic.Data
+import Generic.Data.Microsurgery
+
+data H  -- handwritten
+data G  -- generic
+data S  -- surgery
+
+data T x = C { _a :: Sum Int, _b :: [Int] }
+  deriving stock Generic
+
+deriving via (Surgery Derecordify (T S)) instance Show (T S)
+
+instance Show (T H) where
+  showsPrec n (C a b) =
+    showParen (n > 10)
+      (showString "C "
+        . showsPrec 11 a
+        . showString " "
+        . showsPrec 11 b)
+
+deriving via (Generically (T G)) instance Semigroup (T G)
+instance Semigroup (T H) where
+  C a1 b1 <> C a2 b2 = C (a1 <> a2) (b1 <> b2)
+
+deriving anyclass instance NFData (T G)
+
+instance NFData (T H) where
+  rnf (C a b) = rnf a `seq` rnf b `seq` ()
+
+u :: forall x. T x
+u = C 33 [99]
+
+v :: forall x. T x
+v = C 13 [14]
+
+main :: IO ()
+main = defaultMain
+  [ bgroup "Show"
+      [ bench "handwri" (nf show (u @H))
+      , bench "surgery" (nf show (u @S))
+      ]
+  , bgroup "NFData"
+      [ bench "handwri" (nf id (u @H))
+      , bench "generic" (nf id (u @G))
+      ]
+  , bgroup "Semigroup"
+      [ bench "baselin" (nf (uncurry (++)) ([99], [14 :: Int]))
+      , bench "handwri" (nf (uncurry (<>)) (u @H, v))
+      , bench "generic" (nf (uncurry (<>)) (u @G, v))
+      ]
+  ]
diff --git a/test/unit.hs b/test/unit.hs
--- a/test/unit.hs
+++ b/test/unit.hs
@@ -5,6 +5,7 @@
 import Control.Applicative
 import Data.Semigroup
 import Data.Monoid (Sum(..))
+import Data.Functor.Classes
 import Test.Tasty
 import Test.Tasty.HUnit
 
@@ -61,6 +62,16 @@
     , SE1 True
     ]
 
+-- Deriving Show1
+newtype MyCompose f g a = MyCompose (f (g a))
+  deriving Generic1
+
+instance (Functor f, Show1 f, Show1 g) => Show1 (MyCompose f g) where
+  liftShowsPrec = gliftShowsPrec
+
+instance (Functor f, Show1 f, Show1 g, Show a) => Show (MyCompose f g a) where
+  showsPrec = showsPrec1
+
 maybeModuleName :: String
 #if MIN_VERSION_base(4,12,0)
 maybeModuleName = "GHC.Maybe"
@@ -132,6 +143,10 @@
   , testGroup "Show"
       [ testCase "show" $ "P 1 2" @?= show (p' 1 2)
       , testCase "showsPrec" $ "(P 1 2)" @?= showsPrec 11 (p' 1 2) ""
+      ]
+
+  , testGroup "Show1"
+      [ testCase "show1" $ "MyCompose (Just [()])" @?= show (MyCompose (Just [()]))
       ]
 
   , testGroup "Meta"
