diff --git a/exception-hierarchy.cabal b/exception-hierarchy.cabal
--- a/exception-hierarchy.cabal
+++ b/exception-hierarchy.cabal
@@ -2,7 +2,7 @@
 cabal-version: >= 1.10
 
 name: exception-hierarchy
-version: 0.1.0.4
+version: 0.1.0.6
 stability: Experimental
 author: Yoshikuni Jujo <PAF01143@nifty.ne.jp>
 maintainer: Yoshikuni Jujo <PAF01143@nifty.ne.jp>
@@ -21,16 +21,16 @@
 
 source-repository head
     type: git
-    location: git://github.com/YoshikuniJujo/test-haskell.git
+    location: git://github.com/YoshikuniJujo/exception-hierarchy.git
 
 source-repository this
     type: git
     location: git://github.com/YoshikuniJujo/test-haskell.git
-    tag: exception-hierarchy-0.1.0.4
+    tag: 0.1.0.5
 
 library
     hs-source-dirs: src
     exposed-modules: Control.Exception.Hierarchy
-    build-depends: base == 4.*, template-haskell >= 2.15 && < 2.17
+    build-depends: base == 4.*, template-haskell >= 2.17 && < 2.18
     ghc-options: -Wall -fno-warn-tabs
     default-language: Haskell2010
diff --git a/src/Control/Exception/Hierarchy.hs b/src/Control/Exception/Hierarchy.hs
--- a/src/Control/Exception/Hierarchy.hs
+++ b/src/Control/Exception/Hierarchy.hs
@@ -35,22 +35,25 @@
 
 exceptionContainer :: Name -> DecsQ
 exceptionContainer ec = sequence [
-	dataD (cxt []) he [] Nothing
-		[forallC [PlainTV e] (cxt [myClassP ''Exception [varT e]]) $
-			normalC he [bangType myNotStrict (varT e)]]
-		[derivClause Nothing [conT ''Typeable]],
+	do	tv <- plainInvisTV e specifiedSpec
+		dataD (cxt []) he [] Nothing
+			[forallC [tv] (cxt [myClassP ''Exception [varT e]]) $
+				normalC he [bangType myNotStrict (varT e)]]
+			[derivClause Nothing [conT ''Typeable]],
 	instanceD (cxt []) (conT ''Show `appT` conT he)
 		[funD 'showsPrec
 			[clause [varP d, conP he [varP e]]
 				(normalB $ varE 'showsPrec `appE` varE d `appE` varE e) []]],
-	sigD toEx . forallT [PlainTV e] (cxt [myClassP ''Exception [varT e]]) $
-		varT e `arrT` conT ''SomeException,
+	do	tv <- plainInvisTV e specifiedSpec
+		sigD toEx . forallT [tv] (cxt [myClassP ''Exception [varT e]]) $
+			varT e `arrT` conT ''SomeException,
 	valD (varP toEx)
 		(normalB $ infixE
 			(Just $ varE 'toException) (varE '(.)) (Just $ conE he))
 		[],
-	sigD fromEx . forallT [PlainTV e] (cxt [myClassP ''Exception [varT e]]) $
-		conT ''SomeException `arrT` (conT ''Maybe `appT` varT e),
+	do	tv <- plainInvisTV e specifiedSpec
+		sigD fromEx . forallT [tv] (cxt [myClassP ''Exception [varT e]]) $
+			conT ''SomeException `arrT` (conT ''Maybe `appT` varT e),
 	funD fromEx [clause
 		[varP se]
 		(normalB $ doE [
