diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,1 +1,17 @@
-# incremental
+# incremental: incremental update interface
+
+[![Hackage](https://img.shields.io/hackage/v/incremental.svg)](https://hackage.haskell.org/package/incremental)
+![Haskell CI](https://github.com/fumieval/incremental/workflows/Haskell%20CI/badge.svg)
+[![Discord](https://img.shields.io/discord/664807830116892674?color=%237095ec&label=Discord&style=plastic)](https://discord.gg/DG93Tgs)
+
+This package provides a typeclass for incremental updates and diffing.
+
+```haskell
+class Incremental a where
+  -- | the difference type
+  type Delta a
+  -- | @'maybe' a ('patch' a) ('diff' b a) ≡ b@
+  patch :: a -> Delta a -> a
+  -- | returns 'Nothing' when there is no update
+  diff :: a -> a -> Maybe (Delta a)
+```
diff --git a/incremental.cabal b/incremental.cabal
--- a/incremental.cabal
+++ b/incremental.cabal
@@ -1,5 +1,5 @@
 name:                incremental
-version:             0.1.1
+version:             0.2
 synopsis:            incremental update library
 description:         Generic interface for incremental updates
 homepage:            https://github.com/fumieval/incremental#readme
@@ -7,7 +7,7 @@
 license-file:        LICENSE
 author:              Fumiaki Kinoshita
 maintainer:          fumiexcel@gmail.com
-copyright:           2017 Fumiaki Kinoshita
+copyright:           2020 Fumiaki Kinoshita
 category:            Data
 build-type:          Simple
 extra-source-files:  README.md
@@ -17,10 +17,10 @@
   hs-source-dirs:      src
   exposed-modules:     Data.Incremental
   build-depends:       base >= 4.8 && <5, containers, semigroups, deepseq
-    , extensible >= 0.6.1 && <0.8
+    , bytestring
     , aeson
     , text
-  ghc-options: -Wall
+  ghc-options: -Wall -Wcompat
   default-language:    Haskell2010
 
 test-suite incremental-test
diff --git a/src/Data/Incremental.hs b/src/Data/Incremental.hs
--- a/src/Data/Incremental.hs
+++ b/src/Data/Incremental.hs
@@ -17,24 +17,22 @@
   , Alter(..)
   , Hetero(..)
   , Fresh(..)
-  , WrapDelta(..)
 ) where
 
 import Control.Applicative
 import Control.DeepSeq
 import qualified Data.Aeson as J
+import Data.ByteString (ByteString)
 import Data.Fixed
 import Data.Functor.Identity
 import Data.Semigroup hiding (diff)
 import qualified Data.IntMap.Strict as IntMap
 import qualified Data.Map.Strict as Map
-import Data.Maybe
 import Data.Proxy
 import qualified Data.Set as Set
 import Data.Void
 import Data.Int
 import Data.Word
-import Data.Extensible
 import Data.Text (Text)
 import Numeric.Natural
 import GHC.Generics
@@ -195,27 +193,6 @@
   diff a b = if a /= b then Just b else Nothing; \
   }
 
-newtype WrapDelta h x = WrapDelta { unwrapDelta :: Maybe (Delta (h x)) }
-deriving instance Show (Delta (h x)) => Show (WrapDelta h x)
-deriving instance Eq (Delta (h x)) => Eq (WrapDelta h x)
-deriving instance Ord (Delta (h x)) => Ord (WrapDelta h x)
-deriving instance J.FromJSON (Delta (h x)) => J.FromJSON (WrapDelta h x)
-deriving instance J.ToJSON (Delta (h x)) => J.ToJSON (WrapDelta h x)
-
-deriving instance Incremental (h (TargetOf kv)) => Incremental (Field h kv)
-
-instance WrapForall Incremental h xs => Incremental (xs :& h) where
-  type Delta (xs :& h) = xs :& WrapDelta h
-  patch r = hmapWithIndexFor (Proxy :: Proxy (Instance1 Incremental h))
-    (\i (WrapDelta d) -> maybe (hlookup i r) (patch (hlookup i r)) d)
-  diff r = check
-    . hmapWithIndexFor (Proxy :: Proxy (Instance1 Incremental h))
-    (\i x -> WrapDelta (diff (hlookup i r) x))
-    where
-      check t
-        | getAny $ hfoldMap (Any . isJust . unwrapDelta) t = Just t
-        | otherwise = Nothing
-
 TRIVIAL_EQ(Bool)
 TRIVIAL_EQ(Char)
 TRIVIAL_EQ(Double)
@@ -235,3 +212,4 @@
 TRIVIAL_EQ(Word32)
 TRIVIAL_EQ(Word64)
 TRIVIAL_EQ(Text)
+TRIVIAL_EQ(ByteString)
