diff --git a/src/Language/Haskell/TH/Compat/Data.hs b/src/Language/Haskell/TH/Compat/Data.hs
--- a/src/Language/Haskell/TH/Compat/Data.hs
+++ b/src/Language/Haskell/TH/Compat/Data.hs
@@ -16,7 +16,7 @@
   dataD', newtypeD', dataInstD', newtypeInstD',
 
   -- * Interfaces to destruct data declarations
-  unDataD, unNewtypeD, unDataInstD, unNewtypeInstD,
+  unDataD, unNewtypeD, unDataInstD, unNewtypeInstD, unInstanceD,
   ) where
 
 #if MIN_VERSION_template_haskell(2,11,0)
diff --git a/src/Language/Haskell/TH/Compat/Data/Current.hs b/src/Language/Haskell/TH/Compat/Data/Current.hs
--- a/src/Language/Haskell/TH/Compat/Data/Current.hs
+++ b/src/Language/Haskell/TH/Compat/Data/Current.hs
@@ -3,12 +3,13 @@
   newtypeD', unNewtypeD,
   dataInstD', unDataInstD,
   newtypeInstD', unNewtypeInstD,
+  unInstanceD,
   ) where
 
 import Language.Haskell.TH
   (CxtQ, ConQ, TypeQ, DecQ,
    Cxt, Con, Type, Name, TyVarBndr, Kind,
-   Dec (DataD, NewtypeD, DataInstD, NewtypeInstD),
+   Dec (DataD, NewtypeD, DataInstD, NewtypeInstD, InstanceD),
    dataD, newtypeD, dataInstD, newtypeInstD, conT)
 
 
@@ -18,7 +19,7 @@
        -> DecQ
 dataD' cxt n bs cs ds = dataD cxt n bs Nothing cs $ mapM conT ds
 
--- | Compatible interface to destruct DataD
+-- | Compatible interface to destruct 'DataD'
 unDataD :: Dec -> Maybe (Cxt, Name, [TyVarBndr], Maybe Kind, [Con], [Type])
 unDataD (DataD cxt n bs mk cs ds) = Just (cxt, n, bs, mk, cs, ds)
 unDataD  _                        = Nothing
@@ -29,7 +30,7 @@
           -> DecQ
 newtypeD' cxt n bs c ds = newtypeD cxt n bs Nothing c $ mapM conT ds
 
--- | Compatible interface to destruct NewtypeD
+-- | Compatible interface to destruct 'NewtypeD'
 unNewtypeD :: Dec -> Maybe (Cxt, Name, [TyVarBndr], Maybe Kind, Con, [Type])
 unNewtypeD (NewtypeD cxt n bs mk c ds) = Just (cxt, n, bs, mk, c, ds)
 unNewtypeD  _                          = Nothing
@@ -40,7 +41,7 @@
            -> DecQ
 dataInstD' cxt n as cs ds = dataInstD cxt n as Nothing cs $ mapM conT ds
 
--- | Compatible interface to destruct DataInstD
+-- | Compatible interface to destruct 'DataInstD'
 unDataInstD :: Dec -> Maybe (Cxt, Name, [Type], Maybe Kind, [Con], [Type])
 unDataInstD (DataInstD cxt n as mk cs ds) = Just (cxt, n, as, mk, cs, ds)
 unDataInstD  _                            = Nothing
@@ -51,7 +52,12 @@
               -> DecQ
 newtypeInstD' cxt n as c ds = newtypeInstD cxt n as Nothing c $ mapM conT ds
 
--- | Compatible interface to destruct NewtypeInstD
+-- | Compatible interface to destruct 'NewtypeInstD'
 unNewtypeInstD :: Dec -> Maybe (Cxt, Name, [Type], Maybe Kind, Con, [Type])
 unNewtypeInstD (NewtypeInstD cxt n as mk c ds) = Just (cxt, n, as, mk, c, ds)
 unNewtypeInstD  _                              = Nothing
+
+-- | Compatible interface to destruct 'InstanceD'
+--   No Overlap type is defined before template-haskell-2.11.
+unInstanceD (InstanceD _ cxt ty decs) = Just (cxt, ty, decs)
+unInstanceD  _                        = Nothing
diff --git a/src/Language/Haskell/TH/Compat/Data/V210.hs b/src/Language/Haskell/TH/Compat/Data/V210.hs
--- a/src/Language/Haskell/TH/Compat/Data/V210.hs
+++ b/src/Language/Haskell/TH/Compat/Data/V210.hs
@@ -3,12 +3,13 @@
   newtypeD', unNewtypeD,
   dataInstD', unDataInstD,
   newtypeInstD', unNewtypeInstD,
+  unInstanceD,
   ) where
 
 import Language.Haskell.TH
   (CxtQ, ConQ, TypeQ, DecQ,
    Cxt, Con, Type (ConT), Name, TyVarBndr, Kind,
-   Dec (DataD, NewtypeD, DataInstD, NewtypeInstD),
+   Dec (DataD, NewtypeD, DataInstD, NewtypeInstD, InstanceD),
    dataD, newtypeD, dataInstD, newtypeInstD)
 
 
@@ -18,7 +19,7 @@
        -> DecQ
 dataD' = dataD
 
--- | Compatible interface to destruct DataD
+-- | Compatible interface to destruct 'DataD'
 unDataD :: Dec -> Maybe (Cxt, Name, [TyVarBndr], Maybe Kind, [Con], [Type])
 unDataD (DataD cxt n bs cs ds) = Just (cxt, n, bs, Nothing, cs, map ConT ds)
 unDataD  _                     = Nothing
@@ -29,7 +30,7 @@
           -> DecQ
 newtypeD' = newtypeD
 
--- | Compatible interface to destruct NewtypeD
+-- | Compatible interface to destruct 'NewtypeD'
 unNewtypeD :: Dec -> Maybe (Cxt, Name, [TyVarBndr], Maybe Kind, Con, [Type])
 unNewtypeD (NewtypeD cxt n bs c ds) = Just (cxt, n, bs, Nothing, c, map ConT ds)
 unNewtypeD  _                       = Nothing
@@ -40,7 +41,7 @@
            -> DecQ
 dataInstD' = dataInstD
 
--- | Compatible interface to destruct DataInstD
+-- | Compatible interface to destruct 'DataInstD'
 unDataInstD :: Dec -> Maybe (Cxt, Name, [Type], Maybe Kind, [Con], [Type])
 unDataInstD (DataInstD cxt n as cs ds) = Just (cxt, n, as, Nothing, cs, map ConT ds)
 unDataInstD  _                         = Nothing
@@ -51,7 +52,13 @@
               -> DecQ
 newtypeInstD' = newtypeInstD
 
--- | Compatible interface to destruct NewtypeInstD
+-- | Compatible interface to destruct 'NewtypeInstD'
 unNewtypeInstD :: Dec -> Maybe (Cxt, Name, [Type], Maybe Kind, Con, [Type])
 unNewtypeInstD (NewtypeInstD cxt n as c ds) = Just (cxt, n, as, Nothing, c, map ConT ds)
 unNewtypeInstD  _                           = Nothing
+
+-- | Compatible interface to destruct 'InstanceD'.
+--   No Overlap type is defined before template-haskell-2.11.
+unInstanceD :: Dec -> Maybe (Cxt, Type, [Dec])
+unInstanceD (InstanceD cxt ty decs) = Just (cxt, ty, decs)
+unInstanceD  _                      = Nothing
diff --git a/th-data-compat.cabal b/th-data-compat.cabal
--- a/th-data-compat.cabal
+++ b/th-data-compat.cabal
@@ -1,6 +1,6 @@
 
 name:                th-data-compat
-version:             0.0.1.0
+version:             0.0.2.0
 synopsis:            Compatibility for data definition template of TH
 description:         This package contains wrapped name definitions of
                      data definition template
