diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -2,4 +2,9 @@
 
 ## 0.1.0.1
 
+- Add tests.
+- Add more detailed README.
+
+## 0.1.0.0
+
 Initial release.
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,3 +1,73 @@
 # deriveJsonNoPrefix
 
 Template Haskell macros to derive ToJSON/FromJSON instances in a more prefix-friendly manner.
+
+## Example
+
+Suppose you want to create a JSON like this:
+
+```json
+{
+    "id": "ID STRING",
+    "max": 0.789,
+    "min": 0.123
+}
+```
+
+You'd want to define a record type to derive the instance of [ToJSON](http://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:ToJSON) (and possibly [FromJSON](http://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:FromJSON)) automatically:
+
+```hs
+{-# LANGUAGE TemplateHaskell #-}
+
+import Data.Aeson.TH
+
+data SomeRecord = SomeRecord
+  { id :: String
+  , max :: Double
+  , min :: Double
+  } deriving (Eq, Show)
+
+$(deriveToJSON ''SomeRecord)
+```
+
+But you shouldn't define such a record because both `id`, `max`, and `min` are predefined functions of `Prelude`!!
+
+As a workaround, we frequently prefix the record labels with their type name:
+
+```hs
+data SomeRecord = SomeRecord
+  { someRecordId :: String
+  , someRecordMax :: Double
+  , someRecordMin :: Double
+  } deriving (Eq, Show)
+```
+
+Then `deriveToJSON` with a modified option:
+
+```hs
+deriveToJSON Json.defaultOptions { fieldLabelModifier = firstLower . drop (length "SomeRecord") } ''SomeRecord
+```
+
+That's almost exactly what `deriveToJsonNoTypeNamePrefix` does!!  
+`deriveToJsonNoTypeNamePrefix` is essentially defined as:
+
+```hs
+deriveToJsonNoTypeNamePrefix :: Name -> Q [Dec]
+deriveToJsonNoTypeNamePrefix deriver name =
+  deriveToJSON Json.defaultOptions { fieldLabelModifier = dropPrefix name } name
+```
+
+So now, you don't have reimplement the `fieldLabelModifier` anymore!
+
+```hs
+import Data.Aeson.DeriveNoPrefix
+
+$(deriveJsonNoTypeNamePrefix ''SomeRecord)
+```
+
+## Other libraries which would solve the same problem
+
+- [extensible](https://hackage.haskell.org/package/extensible).
+- And other libraries providing extensible records with `ToJSON` / `FromJSON` instances.
+
+So use this package all of them are too heavy in learning cost / dependency footprint / etc.
diff --git a/deriveJsonNoPrefix.cabal b/deriveJsonNoPrefix.cabal
--- a/deriveJsonNoPrefix.cabal
+++ b/deriveJsonNoPrefix.cabal
@@ -1,14 +1,14 @@
--- This file has been generated from package.yaml by hpack version 0.20.0.
+-- This file has been generated from package.yaml by hpack version 0.28.2.
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 74c415c4bbc0bc2e444cf6fbe4775273c0a303d76c37296a0ae26695cd3c3527
+-- hash: 23a67c72a62e37dccc7fbe295b2d85f31f964da40fbd65ea1e15e4bd7458ea84
 
 name:           deriveJsonNoPrefix
-version:        0.1.0.0
+version:        0.1.0.1
 synopsis:       Derive ToJSON/FromJSON instances in a more prefix-friendly manner.
 description:    Please see the README on GitLab at <https://gitlab.com/igrep/deriveJsonNoPrefix#readme>
-category:       Development
+category:       Data
 homepage:       https://gitlab.com/igrep/deriveJsonNoPrefix
 author:         Yuji Yamamoto
 maintainer:     whosekiteneverfly@gmail.com
@@ -17,7 +17,6 @@
 license-file:   LICENSE
 build-type:     Simple
 cabal-version:  >= 1.10
-
 extra-source-files:
     ChangeLog.md
     README.md
@@ -27,14 +26,33 @@
   location: https://gitlab.com/igrep/deriveJsonNoPrefix
 
 library
+  exposed-modules:
+      Data.Aeson.DeriveNoPrefix
+  other-modules:
+      Paths_deriveJsonNoPrefix
   hs-source-dirs:
       src
   build-depends:
       aeson
     , base >=4.7 && <5
     , template-haskell
-  exposed-modules:
-      Data.Aeson.DeriveNoPrefix
+  default-language: Haskell2010
+
+test-suite deriveJsonNoPrefix-test
+  type: exitcode-stdio-1.0
+  main-is: Data/Aeson/DeriveNoPrefixSpec.hs
   other-modules:
+      Data.Aeson.DeriveNoPrefixSpecLib
       Paths_deriveJsonNoPrefix
+  hs-source-dirs:
+      test
+  ghc-options: -main-is Data.Aeson.DeriveNoPrefixSpec
+  build-depends:
+      aeson
+    , base >=4.7 && <5
+    , deriveJsonNoPrefix
+    , hspec
+    , template-haskell
+    , text
+    , unordered-containers
   default-language: Haskell2010
diff --git a/src/Data/Aeson/DeriveNoPrefix.hs b/src/Data/Aeson/DeriveNoPrefix.hs
--- a/src/Data/Aeson/DeriveNoPrefix.hs
+++ b/src/Data/Aeson/DeriveNoPrefix.hs
@@ -1,4 +1,5 @@
 -- | Template Haskell macros to derive ToJSON/FromJSON instances in a more prefix-friendly manner.
+--   See <https://gitlab.com/igrep/deriveJsonNoPrefix#readme>.
 
 module Data.Aeson.DeriveNoPrefix
   ( deriveJsonNoTypeNamePrefix
diff --git a/test/Data/Aeson/DeriveNoPrefixSpec.hs b/test/Data/Aeson/DeriveNoPrefixSpec.hs
new file mode 100644
--- /dev/null
+++ b/test/Data/Aeson/DeriveNoPrefixSpec.hs
@@ -0,0 +1,30 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module Data.Aeson.DeriveNoPrefixSpec where
+
+
+import qualified Data.Aeson as Json
+import qualified Data.HashMap.Strict as HM
+import           Data.Text ()
+import           Test.Hspec
+
+import           Data.Aeson.DeriveNoPrefixSpecLib
+
+
+main :: IO ()
+main = hspec $ do
+  let jsonVal = Json.Object $
+        HM.fromList
+        [ ("id",  Json.String "the id")
+        , ("max", Json.Number 456)
+        , ("min", Json.Number 123)
+        ]
+      record = SomeRecord "the id" 456 123
+
+  describe "ToJSON instance derived by deriveJsonNoTypeNamePrefix" $
+    it "the encoded JSON's keys are same as record labels without their type name prefix." $
+      Json.toJSON record `shouldBe` jsonVal
+
+  describe "FromJSON instance derived by deriveJsonNoTypeNamePrefix" $
+    it "decodes JSONs whose keys are same as record labels without their type name prefix." $
+      Json.fromJSON jsonVal `shouldBe` Json.Success record
diff --git a/test/Data/Aeson/DeriveNoPrefixSpecLib.hs b/test/Data/Aeson/DeriveNoPrefixSpecLib.hs
new file mode 100644
--- /dev/null
+++ b/test/Data/Aeson/DeriveNoPrefixSpecLib.hs
@@ -0,0 +1,15 @@
+{-# LANGUAGE TemplateHaskell #-}
+
+module Data.Aeson.DeriveNoPrefixSpecLib where
+
+import           Data.Aeson.DeriveNoPrefix
+
+
+data SomeRecord = SomeRecord
+  { someRecordId :: String
+  , someRecordMax :: Double
+  , someRecordMin :: Double
+  } deriving (Eq, Show)
+
+
+$(deriveJsonNoTypeNamePrefix ''SomeRecord)
