diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,10 @@
 # Revision history for tree-diff
 
+## 0.0.2
+
+- Print compact diffs
+- Add `ToExpr` instance for `ShortByteString`
+
 ## 0.0.1
 
 - Use `BS.readFile` and `BS.writeFile` in `ediffGolden`.
diff --git a/Setup.hs b/Setup.hs
deleted file mode 100644
--- a/Setup.hs
+++ /dev/null
@@ -1,2 +0,0 @@
-import Distribution.Simple
-main = defaultMain
diff --git a/fixtures/exfoo.expr b/fixtures/exfoo.expr
--- a/fixtures/exfoo.expr
+++ b/fixtures/exfoo.expr
@@ -1,4 +1,6 @@
 Foo
   {fooBar = [Just "pub", Just (concat ["night\n", "club"])],
    fooInt = 42,
-   fooQuu = _×_ 125.375 Proxy}
+   fooNew = True,
+   fooQuu = _×_ 125.375 Proxy,
+   fooStr = "Some Name"}
diff --git a/src/Data/TreeDiff/Class.hs b/src/Data/TreeDiff/Class.hs
--- a/src/Data/TreeDiff/Class.hs
+++ b/src/Data/TreeDiff/Class.hs
@@ -57,8 +57,9 @@
 import qualified Data.Time as Time
 
 -- bytestring
-import qualified Data.ByteString      as BS
-import qualified Data.ByteString.Lazy as LBS
+import qualified Data.ByteString       as BS
+import qualified Data.ByteString.Lazy  as LBS
+import qualified Data.ByteString.Short as SBS
 
 -- scientific
 import qualified Data.Scientific as Sci
@@ -377,6 +378,16 @@
 -- BS.concat ["foo\n", "bar\n"]
 instance ToExpr BS.ByteString where
     toExpr = stringToExpr "BS.concat" . bsUnconcat BS.null BS.elemIndex BS.splitAt
+
+-- | >>> traverse_ (print . prettyExpr . toExpr . SBS.toShort . BS8.pack) ["", "\n", "foo", "foo\n", "foo\nbar", "foo\nbar\n"]
+-- ""
+-- "\n"
+-- "foo"
+-- "foo\n"
+-- mconcat ["foo\n", "bar"]
+-- mconcat ["foo\n", "bar\n"]
+instance ToExpr SBS.ShortByteString where
+    toExpr = stringToExpr "mconcat" . bsUnconcat BS.null BS.elemIndex BS.splitAt . SBS.fromShort
 
 bsUnconcat
     :: forall bs int. Num int
diff --git a/src/Data/TreeDiff/Golden.hs b/src/Data/TreeDiff/Golden.hs
--- a/src/Data/TreeDiff/Golden.hs
+++ b/src/Data/TreeDiff/Golden.hs
@@ -16,8 +16,8 @@
 
 -- | Make a golden tests.
 --
--- 'ediffGolden' is testing framework agnostic, thus the test framework
--- looks intimdating.
+-- 'ediffGolden' is testing framework agnostic, thus the type
+-- looks intimidating.
 --
 -- An example using @tasty-golden@,
 -- 'goldenTest' is imported from "Test.Tasty.Golden.Advanced"
@@ -30,7 +30,7 @@
 --
 -- The 'ediffGolden' will read an 'Expr' from provided path to golden file,
 -- and compare it with a 'toExpr' of a result. If values differ,
--- the diff of two will be printed.
+-- the (compact) diff of two will be printed.
 --
 -- See <https://github.com/phadej/tree-diff/blob/master/tests/Tests.hs>
 -- for a proper example.
@@ -53,5 +53,5 @@
     cmp a b
         | a == b    = return Nothing
         | otherwise = return $ Just $
-            setSGRCode [Reset] ++ show (ansiWlEditExpr $ ediff a b)
+            setSGRCode [Reset] ++ show (ansiWlEditExprCompact $ ediff a b)
     wrt expr = BS.writeFile fp $ T.encodeUtf8 $ T.pack $ show (prettyExpr expr) ++ "\n"
diff --git a/src/Data/TreeDiff/Pretty.hs b/src/Data/TreeDiff/Pretty.hs
--- a/src/Data/TreeDiff/Pretty.hs
+++ b/src/Data/TreeDiff/Pretty.hs
@@ -4,27 +4,33 @@
     Pretty (..),
     ppExpr,
     ppEditExpr,
+    ppEditExprCompact,
     -- * pretty
     prettyPretty,
     prettyExpr,
     prettyEditExpr,
+    prettyEditExprCompact,
     -- * ansi-wl-pprint
     ansiWlPretty,
     ansiWlExpr,
     ansiWlEditExpr,
+    ansiWlEditExprCompact,
     -- ** background
     ansiWlBgPretty,
     ansiWlBgExpr,
     ansiWlBgEditExpr,
+    ansiWlBgEditExprCompact,
     -- * Utilities
     escapeName,
     ) where
 
 import Data.Char          (isAlphaNum, isPunctuation, isSymbol, ord)
+import Data.Either        (partitionEithers)
 import Data.TreeDiff.Expr
 import Numeric            (showHex)
 import Text.Read          (readMaybe)
 
+
 import qualified Data.Map                     as Map
 import qualified Text.PrettyPrint             as HJ
 import qualified Text.PrettyPrint.ANSI.Leijen as WL
@@ -119,7 +125,14 @@
 
 -- | Pretty print an @'Edit' 'EditExpr'@ using explicit pretty-printing dictionary.
 ppEditExpr :: Pretty doc -> Edit EditExpr -> doc
-ppEditExpr p = ppSep p . ppEdit False
+ppEditExpr = ppEditExpr' False
+
+-- | Like 'ppEditExpr' but print unchanged parts only shallowly
+ppEditExprCompact :: Pretty doc -> Edit EditExpr -> doc
+ppEditExprCompact = ppEditExpr' True
+
+ppEditExpr' :: Bool -> Pretty doc -> Edit EditExpr -> doc
+ppEditExpr' compact p = ppSep p . ppEdit False
   where
     ppEdit b (Cpy (EditExp expr)) = [ ppCpy p $ ppExpr' p b expr ]
     ppEdit b (Cpy expr) = [ ppEExpr b expr ]
@@ -134,15 +147,23 @@
     ppEExpr b (EditApp x xs) = ppParens' b $ ppHang p (ppCon p (escapeName x)) $
         ppSep p $ concatMap (ppEdit True) xs
     ppEExpr _ (EditRec x xs) = ppHang p (ppCon p (escapeName x)) $ ppRec p $
-        map ppField' $ Map.toList xs
+        justs ++ [ (n, ppCon p "...") | n <- take 1 nothings ]
+      where
+        xs' = map ppField' $ Map.toList xs
+        (nothings, justs) = partitionEithers xs'
+
     ppEExpr _ (EditLst xs)   = ppLst p (concatMap (ppEdit False) xs)
     ppEExpr b (EditExp x)    = ppExpr' p b x
 
-    ppField' (n, e) = (escapeName n, ppSep p $ ppEdit False e)
+    ppField' (n, Cpy (EditExp e)) | compact, not (isScalar e) = Left n
+    ppField' (n, e) = Right (escapeName n, ppSep p $ ppEdit False e)
 
     ppParens' True  = ppParens p
     ppParens' False = id
 
+    isScalar (App _ []) = True
+    isScalar _          = False
+
 -------------------------------------------------------------------------------
 -- pretty
 -------------------------------------------------------------------------------
@@ -173,6 +194,10 @@
 prettyEditExpr :: Edit EditExpr -> HJ.Doc
 prettyEditExpr = ppEditExpr prettyPretty
 
+-- | Compact 'prettyEditExpr'.
+prettyEditExprCompact :: Edit EditExpr -> HJ.Doc
+prettyEditExprCompact = ppEditExprCompact prettyPretty
+
 -------------------------------------------------------------------------------
 -- ansi-wl-pprint
 -------------------------------------------------------------------------------
@@ -200,6 +225,10 @@
 ansiWlEditExpr :: Edit EditExpr -> WL.Doc
 ansiWlEditExpr = ppEditExpr ansiWlPretty
 
+-- | Compact 'ansiWlEditExpr'
+ansiWlEditExprCompact :: Edit EditExpr -> WL.Doc
+ansiWlEditExprCompact = ppEditExprCompact ansiWlPretty
+
 -------------------------------------------------------------------------------
 -- Background
 -------------------------------------------------------------------------------
@@ -209,7 +238,7 @@
 ansiWlBgPretty = ansiWlPretty
     { ppIns    = \d -> WL.ondullgreen $ WL.white $ WL.plain $ WL.char '+' WL.<> d
     , ppDel    = \d -> WL.ondullred   $ WL.white $ WL.plain $ WL.char '-' WL.<> d
-    } 
+    }
 
 -- | Pretty print 'Expr' using @ansi-wl-pprint@.
 ansiWlBgExpr :: Expr -> WL.Doc
@@ -218,3 +247,7 @@
 -- | Pretty print @'Edit' 'EditExpr'@ using @ansi-wl-pprint@.
 ansiWlBgEditExpr :: Edit EditExpr -> WL.Doc
 ansiWlBgEditExpr = ppEditExpr ansiWlBgPretty
+
+-- | Compact 'ansiWlBgEditExpr'.
+ansiWlBgEditExprCompact :: Edit EditExpr -> WL.Doc
+ansiWlBgEditExprCompact = ppEditExprCompact ansiWlBgPretty
diff --git a/tests/Tests.hs b/tests/Tests.hs
--- a/tests/Tests.hs
+++ b/tests/Tests.hs
@@ -93,7 +93,8 @@
     { fooInt :: Int
     , fooBar :: [Maybe String]
     , fooQuu :: (Double, Proxy ())
-    -- , fooNew :: Bool
+    , fooNew :: Bool
+    , fooStr :: String
     }
   deriving (Eq, Show, Generic)
 
@@ -104,7 +105,8 @@
     { fooInt = 42
     , fooBar = [Just "pub", Just "night\nclub"]
     , fooQuu = (125.375, Proxy)
-    -- , fooNew = True
+    , fooNew = True
+    , fooStr = "Some Name"
     }
 
 exFooTests :: TestTree
diff --git a/tree-diff.cabal b/tree-diff.cabal
--- a/tree-diff.cabal
+++ b/tree-diff.cabal
@@ -1,6 +1,9 @@
+cabal-version:       >=1.10
 name:                tree-diff
-version:             0.0.1
+version:             0.0.2
+
 synopsis:            Diffing of (expression) trees.
+category:            Data, Testing
 description:
   Common diff algorithm works on list structures:
   .
@@ -34,16 +37,17 @@
 license-file:        LICENSE
 author:              Oleg Grenrus <oleg.grenrus@iki.fi>
 maintainer:          Oleg.Grenrus <oleg.grenrus@iki.fi>
-copyright:           (c) 2017 Oleg Grenrus
-category:            Data
+copyright:           (c) 2017-2018 Oleg Grenrus
 build-type:          Simple
 extra-source-files:  README.md ChangeLog.md
-cabal-version:       >=1.10
 tested-with:
   GHC==7.8.4,
   GHC==7.10.3,
   GHC==8.0.2,
-  GHC==8.2.1
+  GHC==8.2.2,
+  GHC==8.4.4,
+  GHc==8.6.2
+
 extra-source-files:
   fixtures/exfoo.expr
 
@@ -63,20 +67,20 @@
     Data.TreeDiff.Golden
     Data.TreeDiff.QuickCheck
   build-depends:
-    base                 >=4.7      && <4.11,
-    aeson                >=1.2.1.0  && <1.3,
+    base                 >=4.7      && <4.13,
+    aeson                >=1.2.1.0  && <1.5,
     ansi-wl-pprint       >=0.6.8.1  && <0.7,
     ansi-terminal        >=0.6.3.1  && <0.9,
-    base-compat          >=0.9.3    && <0.10,
+    base-compat          >=0.9.3    && <0.11,
     bytestring           >=0.10.4.0 && <0.11,
-    containers           >=0.5.5.1  && <0.6,
-    generics-sop         >=0.3.1.0  && <0.4,
+    containers           >=0.5.5.1  && <0.7,
+    generics-sop         >=0.3.1.0  && <0.5,
     hashable             >=1.2.6.1  && <1.3,
     MemoTrie             >=0.6.8    && <0.7,
     parsec               >=3.1.11   && <3.2,
     parsers              >=0.12.7   && <0.13,
     pretty               >=1.1.1.1  && <1.2,
-    QuickCheck           >=2.10.0.1 && <2.11,
+    QuickCheck           >=2.10.0.1 && <2.13,
     scientific           >=0.3.5.2  && <0.4,
     tagged               >=0.8.5    && <0.9,
     text                 >=1.2.2.2  && <1.3,
@@ -119,7 +123,7 @@
     ansi-terminal,
     ansi-wl-pprint,
     parsec,
-    trifecta             >=1.7.1.1  && <1.8,
-    tasty                >=0.11.2.5 && <1.1,
+    trifecta             >=1.7.1.1  && <2.1,
+    tasty                >=0.11.2.5 && <1.2,
     tasty-golden         >=2.3.1.1  && <2.4,
-    tasty-quickcheck     >=0.9.1    && <0.10
+    tasty-quickcheck     >=0.9.1    && <0.11
