diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,8 @@
+0.2.3
+-----
+* GHC 7.8 compatibility
+* Bumped `cereal` dependency.
+
 0.2.1
 -----
 * Exported `insert` from `Data.HyperLogLog`.
diff --git a/hyperloglog.cabal b/hyperloglog.cabal
--- a/hyperloglog.cabal
+++ b/hyperloglog.cabal
@@ -1,6 +1,6 @@
 name:          hyperloglog
 category:      Numeric
-version:       0.2.1
+version:       0.2.3
 license:       BSD3
 cabal-version: >= 1.8
 license-file:  LICENSE
@@ -53,12 +53,12 @@
     binary                    >= 0.5      && < 0.8,
     bits                      >= 0.2      && < 1,
     bytes                     >= 0.7      && < 1,
-    cereal                    >= 0.3.5    && < 0.4,
+    cereal                    >= 0.3.5    && < 0.5,
     cereal-vector             >= 0.2      && < 0.3,
     comonad                   >= 4        && < 5,
     deepseq                   >= 1.3      && < 1.5,
     distributive              >= 0.3      && < 1,
-    generic-deriving          >= 1.4      && < 1.6,
+    generic-deriving          >= 1.4      && < 1.7,
     hashable                  >= 1.1.2.3  && < 1.3,
     hashable-extras           >= 0.1      && < 1,
     lens                      >= 4        && < 5,
diff --git a/src/Data/HyperLogLog/Config.hs b/src/Data/HyperLogLog/Config.hs
--- a/src/Data/HyperLogLog/Config.hs
+++ b/src/Data/HyperLogLog/Config.hs
@@ -13,6 +13,10 @@
 {-# LANGUAGE FunctionalDependencies #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE TypeFamilies #-}
+{-# OPTIONS_GHC -fno-cse #-}
+{-# OPTIONS_GHC -fno-full-laziness #-}
+{-# OPTIONS_GHC -fno-float-in #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
 
 #if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 706
 {-# LANGUAGE DataKinds #-}
@@ -116,8 +120,8 @@
   reflectConfig :: p o -> Config
 
 #ifdef USE_TYPE_LITS
-instance SingRep n Integer => ReifiesConfig (n :: Nat) where
-  reflectConfig _ = hll $ fromInteger $ withSing $ \(x :: Sing n) -> fromSing x
+instance KnownNat n => ReifiesConfig (n :: Nat) where
+  reflectConfig _ = hll $ fromInteger $ natVal (Proxy :: Proxy n)
   {-# INLINE reflectConfig #-}
 #endif
 
@@ -135,7 +139,6 @@
 reifyConfig i f = reify (hll i) (go f) where
   go :: Reifies o Config => (Proxy (ReifiedConfig o) -> a) -> proxy o -> a
   go g _ = g Proxy
-
 {-# INLINE reifyConfig #-}
 
 instance Reifies n Int => ReifiesConfig (D n) where
diff --git a/src/Data/HyperLogLog/Type.hs b/src/Data/HyperLogLog/Type.hs
--- a/src/Data/HyperLogLog/Type.hs
+++ b/src/Data/HyperLogLog/Type.hs
@@ -12,11 +12,19 @@
 {-# LANGUAGE TemplateHaskell           #-}
 {-# LANGUAGE TypeFamilies              #-}
 {-# LANGUAGE UndecidableInstances      #-}
+{-# OPTIONS_GHC -fno-cse #-}
+{-# OPTIONS_GHC -fno-full-laziness #-}
+{-# OPTIONS_GHC -fno-float-in #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
 
 #if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 706
 {-# LANGUAGE PolyKinds                 #-}
 #endif
 
+#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 706
+{-# LANGUAGE RoleAnnotations #-}
+#endif
+
 --------------------------------------------------------------------
 -- |
 -- Copyright :  (c) Edward Kmett 2013
@@ -89,6 +97,10 @@
 -- approximate counter.
 newtype HyperLogLog p = HyperLogLog { runHyperLogLog :: V.Vector Rank }
     deriving (Eq, Show, Generic)
+
+#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 706
+type role HyperLogLog nominal
+#endif
 
 instance Serialize (HyperLogLog p)
 
