diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,9 +1,14 @@
-jsonschema-gen-0.2.0.0
+0.3.0.0
 
+* Add version constraints to dependent packages.
+* Remove dendency to transformers in test program.
+
+0.2.0.0
+
 * Rename PropType to FieldType.
 * Fix typo in cabal file.
 * Fix typo in comment.
 
-jsonschema-gen-0.1.0.0
+0.1.0.0
 
 * initial release.
diff --git a/jsonschema-gen.cabal b/jsonschema-gen.cabal
--- a/jsonschema-gen.cabal
+++ b/jsonschema-gen.cabal
@@ -1,5 +1,5 @@
 name:                jsonschema-gen
-version:             0.2.0.0
+version:             0.3.0.0
 synopsis:            JSON Schema generator from Algebraic data type
 description:         This library contains a JSON Schema generator.
 homepage:            https://github.com/yuga/jsonschema-gen
@@ -26,22 +26,22 @@
                        Data.JSON.Schema.Generator.Types
 
   build-depends:       base >=4.6 && <4.9
-                     , bytestring
-                     , containers
-                     , tagged
-                     , text
-                     , time
-                     , unordered-containers
-                     , vector
+                     , bytestring >=0.10 && <0.11
+                     , containers >=0.5 && <0.6
+                     , tagged >=0.7 && <0.9
+                     , text >=0.11 && <1.3
+                     , time >=1.4 && <1.6
+                     , unordered-containers >=0.2 && <0.3
+                     , vector >=0.10 && <0.11
 
   if flag(safe-aeson)
     build-depends:
-                       aeson >=0.7.0.6
-                     , scientific >=0.3.2.0
+                       aeson >=0.7.0.6 && <0.9
+                     , scientific >=0.3.2.0 && <0.4
   else
     build-depends:
-                       aeson
-                     , scientific
+                       aeson >=0.7 && <0.9
+                     , scientific >=0.2 && <0.4
 
   hs-source-dirs:      src
   default-language:    Haskell2010
@@ -57,14 +57,13 @@
   other-modules:       Types
                        Values
   build-depends:       base >=4.6 && <4.9
-                     , aeson
-                     , bytestring
-                     , containers
+                     , aeson >=0.7 && <0.9
+                     , bytestring >=0.10 && <0.11
+                     , containers >=0.5 && <0.6
                      , jsonschema-gen
-                     , process
-                     , tagged
-                     , text
-                     , transformers
+                     , process >=1.1 && <1.3
+                     , tagged >=0.7 && <0.9
+                     , text >=0.11 && <1.3
   hs-source-dirs:      tests
   default-language:    Haskell2010
 
diff --git a/tests/Main.hs b/tests/Main.hs
--- a/tests/Main.hs
+++ b/tests/Main.hs
@@ -12,8 +12,7 @@
 
 import Control.Applicative ((<*>), pure)
 import Control.Arrow ((&&&))
-import Control.Monad (forM, forM_)
-import Control.Monad.Trans.State
+import Control.Monad (forM_)
 import qualified Data.Aeson as A
 import qualified Data.Aeson.TH as A
 import qualified Data.ByteString.Lazy.Char8 as BL
@@ -117,11 +116,10 @@
 showC _ = "tag"
 
 pairsOptSymbol :: [A.Options] -> String -> [(A.Options, String)]
-pairsOptSymbol opts name =
-    fst . flip runState (0 :: Int) $ forM opts $ \opt -> do
-        n <- fmap (+ 1) get
-        put $! n
-        return (opt, name ++ "_" ++ show n)
+pairsOptSymbol opts name = go opts (1 :: Int)
+  where
+    go []          _ = []
+    go (opt:opts') n = (opt, name ++ "_" ++ show n) : go opts' (n + 1)
 
 printValueAsJson :: (Generic a, A.GToJSON (Rep a)) => Handle -> [A.Options] -> String -> a -> IO ()
 printValueAsJson h opts name value =
