diff --git a/Data/Time/Zones.hs b/Data/Time/Zones.hs
--- a/Data/Time/Zones.hs
+++ b/Data/Time/Zones.hs
@@ -7,10 +7,11 @@
 -}
 
 {-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE DeriveDataTypeable #-}
 
 module Data.Time.Zones (
   TZ,
-  utcTZ,
+  Data.Time.Zones.Types.utcTZ,
   -- * Universal -> Local direction
   diffForPOSIX,
   timeZoneForPOSIX,
@@ -32,14 +33,16 @@
   diffForAbbr,
   ) where
 
-import Data.Bits (shiftR)
-import Data.Int (Int64)
-import Data.Time
+import           Control.DeepSeq
+import           Data.Bits (shiftR)
+import           Data.Data
+import           Data.Int (Int64)
+import           Data.Time
+import           Data.Time.Zones.Internal
+import           Data.Time.Zones.Read
+import           Data.Time.Zones.Types
 import qualified Data.Vector as VB
 import qualified Data.Vector.Unboxed as VU
-import Data.Time.Zones.Types
-import Data.Time.Zones.Read
-import Data.Time.Zones.Internal
 
 -- | Returns the time difference (in seconds) for TZ at the given
 -- POSIX time.
@@ -77,10 +80,6 @@
     (ut, ps) = utcTimeToInt64Pair utcT
     ut' = ut + fromIntegral (diffForPOSIX tz ut)
 
--- | The `TZ` definition for UTC.
-utcTZ :: TZ
-utcTZ = TZ (VU.singleton minBound) (VU.singleton 0) (VB.singleton (False, "UTC"))
-
 -- | Returns the largest index `i` such that `v ! i <= t`.
 --
 -- Assumes that `v` is sorted, has at least one element and `v ! 0 <= t`.
@@ -134,8 +133,11 @@
   | FLDouble { _flIx :: {-# UNPACK #-} !Int
              , _flRes1 :: {-# UNPACK #-} !Int64
              , _flRes2 :: {-# UNPACK #-} !Int64 }
-  deriving (Show)
+  deriving (Eq, Show, Read, Typeable, Data)
 
+instance NFData FromLocal where
+  rnf !_ = ()
+
 -- We make the following two assumptions here:
 --
 -- 1. No diff in any time zone is ever bigger than 24 hours.
@@ -193,7 +195,10 @@
                  , _ltuSecond     :: UTCTime
                  , _ltuFirstZone  :: TimeZone
                  , _ltuSecondZone :: TimeZone
-                 } deriving (Eq, Show)
+                 } deriving (Eq, Show, Read, Typeable, Data)
+
+instance NFData LocalToUTCResult where
+  rnf !_ = ()
 
 -- TODO(klao): better name
 localTimeToUTCFull :: TZ -> LocalTime -> LocalToUTCResult
diff --git a/Data/Time/Zones/Read.hs b/Data/Time/Zones/Read.hs
--- a/Data/Time/Zones/Read.hs
+++ b/Data/Time/Zones/Read.hs
@@ -24,7 +24,7 @@
 import Control.Exception (assert)
 import Control.Monad
 import Data.Binary
-import Data.Binary.Get
+import Data.Binary.Get (getByteString, getWord32be, getWord64be, runGet, skip)
 import qualified Data.ByteString.Char8 as BS
 import qualified Data.ByteString.Lazy.Char8 as BL
 import Data.Maybe
@@ -35,6 +35,9 @@
 import Data.Time.Zones.Types
 import System.Environment
 import System.IO.Error
+
+-- Suppress 'redundant imports' warning
+import Prelude
 
 -- | Reads and parses a time zone information file (in @tzfile(5)@
 -- aka. Olson file format) and returns the corresponding TZ data
diff --git a/Data/Time/Zones/Types.hs b/Data/Time/Zones/Types.hs
--- a/Data/Time/Zones/Types.hs
+++ b/Data/Time/Zones/Types.hs
@@ -6,14 +6,19 @@
 Stability   : experimental
 -}
 
+{-# LANGUAGE DeriveDataTypeable #-}
+
 module Data.Time.Zones.Types (
   TZ(..),
+  utcTZ,
   ) where
 
-import Control.DeepSeq
-import Data.Int
-import qualified Data.Vector.Unboxed as VU
+import           Control.DeepSeq
+import           Data.Data
+import           Data.Default
+import           Data.Int
 import qualified Data.Vector as VB
+import qualified Data.Vector.Unboxed as VU
 
 data TZ = TZ {
   _tzTrans :: !(VU.Vector Int64),
@@ -22,7 +27,14 @@
   -- (short) vector of expanded 'TimeZone's, similarly to how it's
   -- stored?
   _tzInfos :: !(VB.Vector (Bool, String))   -- (summer, name)
-  } deriving (Eq,Show)
+  } deriving (Eq, Show, Typeable, Data, Read)
 
 instance NFData TZ where
   rnf (TZ { _tzInfos = infos }) = rnf infos
+
+-- | The `TZ` definition for UTC.
+utcTZ :: TZ
+utcTZ = TZ (VU.singleton minBound) (VU.singleton 0) (VB.singleton (False, "UTC"))
+
+instance Default TZ where
+  def = utcTZ
diff --git a/stack.yaml b/stack.yaml
--- a/stack.yaml
+++ b/stack.yaml
@@ -1,17 +1,14 @@
 # For more information, see: https://github.com/commercialhaskell/stack/blob/release/doc/yaml_configuration.md
 
 # Specifies the GHC version and set of packages available (e.g., lts-3.5, nightly-2015-09-21, ghc-7.10.2)
-resolver: lts-3.17
+resolver: lts-5.15
 
 # Local packages, usually specified by relative directory name
 packages:
 - '.'
 
 # Packages to be pulled from upstream that are not in the resolver (e.g., acme-missiles-0.3)
-extra-deps:
-- bindings-posix-1.2.6
-- criterion-1.1.0.0
-- tzdata-0.1.20150810.0
+extra-deps: []
 
 # Override default flag values for local packages and extra-deps
 flags: {}
diff --git a/tz.cabal b/tz.cabal
--- a/tz.cabal
+++ b/tz.cabal
@@ -1,5 +1,5 @@
 Name: tz
-Version: 0.1.0.1
+Version: 0.1.1.0
 License: Apache-2.0
 License-File: LICENSE
 Author: Mihaly Barasz, Gergely Risko
@@ -50,11 +50,12 @@
   GHC-Options: -Wall
   Build-Depends:
     base               >= 4        && < 5,
-    binary             >= 0.5      && < 0.8,
+    binary             >= 0.5      && < 0.9,
     bytestring         >= 0.9      && < 0.11,
     containers         >= 0.5      && < 0.6,
+    data-default       >= 0.5      && < 0.7,
     deepseq            >= 1.1      && < 2,
-    time               >= 1.2      && < 1.6,
+    time               >= 1.2      && < 1.7,
     tzdata             >= 0.1      && < 0.2,
     vector             >= 0.9      && < 0.12
   if flag(template-haskell)
@@ -76,13 +77,13 @@
     tz,
     base                       >= 4       && < 5,
     bindings-posix             >= 1.2     && < 2,
-    HUnit                      >= 1.2     && < 1.3,
+    HUnit                      >= 1.2     && < 1.4,
     QuickCheck                 >= 2.4     && < 3,
     test-framework             >= 0.4     && < 1,
     test-framework-hunit       >= 0.2     && < 0.4,
     test-framework-quickcheck2 >= 0.2     && < 0.4,
     test-framework-th          >= 0.2     && < 0.4,
-    time                       >= 1.2     && < 1.6,
+    time                       >= 1.2     && < 1.7,
     unix                       >= 2.6     && < 3,
     vector                     >= 0.9     && < 0.12
 
@@ -97,7 +98,7 @@
   Build-Depends:
     tz,
     base                       >= 4       && < 5,
-    HUnit                      >= 1.2     && < 1.3,
+    HUnit                      >= 1.2     && < 1.4,
     test-framework             >= 0.4     && < 1,
     test-framework-hunit       >= 0.2     && < 0.4,
     test-framework-th          >= 0.2     && < 0.4
@@ -112,7 +113,7 @@
     tz,
     tzdata,
     base                       >= 4       && < 5,
-    HUnit                      >= 1.2     && < 1.3,
+    HUnit                      >= 1.2     && < 1.4,
     test-framework             >= 0.4     && < 1,
     test-framework-hunit       >= 0.2     && < 0.4,
     test-framework-th          >= 0.2     && < 0.4
@@ -127,8 +128,8 @@
     tz,
     base                       >= 4       && < 5,
     bindings-posix             >= 1.2     && < 2,
-    criterion                  >= 0.8     && < 1.1,
-    time                       >= 1.2     && < 1.6,
+    criterion                  >= 0.8     && < 1.2,
+    time                       >= 1.2     && < 1.7,
     timezone-olson,
     timezone-series,
     unix                       >= 2.6     && < 3
@@ -143,7 +144,7 @@
     tz,
     base                       >= 4       && < 5,
     bindings-posix             >= 1.2     && < 2,
-    criterion                  >= 0.8     && < 1.1,
+    criterion                  >= 0.8     && < 1.2,
     unix                       >= 2.6     && < 3
 
 Benchmark bench_greg
@@ -155,7 +156,7 @@
   Build-Depends:
     tz,
     base                       >= 4       && < 5,
-    criterion                  >= 0.8     && < 1.1,
+    criterion                  >= 0.8     && < 1.2,
     lens,
     thyme,
     time
@@ -169,5 +170,5 @@
   Build-Depends:
     tz,
     base                       >= 4       && < 5,
-    criterion                  >= 0.8     && < 1.1,
+    criterion                  >= 0.8     && < 1.2,
     time
