diff --git a/src/Data/KVList.hs b/src/Data/KVList.hs
--- a/src/Data/KVList.hs
+++ b/src/Data/KVList.hs
@@ -29,6 +29,8 @@
 
 import Prelude
 
+import Data.Functor ((<&>))
+import qualified Data.List as List
 import Data.Kind (Constraint, Type)
 import Data.Typeable (Typeable, typeOf)
 import GHC.TypeLits (KnownSymbol, Symbol, TypeError, ErrorMessage(Text))
@@ -53,6 +55,43 @@
 data KVList (kvs :: [Type]) where
   KVNil :: KVList '[]
   KVCons :: (KnownSymbol key) => key := v -> KVList xs -> KVList ((key := v) ': xs)
+
+
+{-| -}
+instance ShowFields (KVList kvs) => Show (KVList kvs) where
+  show kvs =
+    List.unlines $
+      "KVList.empty" : showFields kvs
+
+class ShowFields a where
+  showFields :: a -> [String]
+
+instance ShowFields (KVList '[]) where
+  showFields _ = []
+
+instance ( ShowFields (KVList kvs)
+         , Show v
+         ) => ShowFields (KVList ((k := v) ': kvs)) where
+  showFields (KVCons (k := v) next) =
+    let
+      firstLine str =
+        List.unwords
+          [ "&="
+          , "#" <> show k
+          , ":="
+          , str
+          ]
+    in
+    ( case List.lines $ show v of
+        [] -> [ firstLine "" ]
+        [a] -> [ firstLine a ]
+        as ->
+          List.concat
+            [ [ firstLine "(" ]
+            , as <&> \x -> "  " ++ x
+            , [ ")" ]
+            ]
+    ) ++ showFields next
 
 {-| -}
 empty :: KVList '[]
diff --git a/type-level-kv-list.cabal b/type-level-kv-list.cabal
--- a/type-level-kv-list.cabal
+++ b/type-level-kv-list.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           type-level-kv-list
-version:        2.0.1.0
+version:        2.0.1.1
 synopsis:       Type level Key-Value list.
 description:    This library provides a brief implementation for extensible records.
 category:       Data
