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.3.2
+version:       0.2.3.3
 license:       BSD3
 cabal-version: >= 1.8
 license-file:  LICENSE
@@ -61,7 +61,7 @@
     generic-deriving          >= 1.4      && < 1.7,
     hashable                  >= 1.1.2.3  && < 1.3,
     hashable-extras           >= 0.1      && < 1,
-    lens                      >= 4        && < 5,
+    lens                      >= 4        && < 4.5,
     reflection                >= 1.3      && < 2,
     semigroupoids             >= 4        && < 5,
     semigroups                >= 0.8.4    && < 1,
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
@@ -8,7 +8,6 @@
 {-# LANGUAGE RecordWildCards #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE UndecidableInstances #-}
-{-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE FunctionalDependencies #-}
 {-# LANGUAGE FlexibleInstances #-}
@@ -18,12 +17,20 @@
 {-# OPTIONS_GHC -fno-float-in #-}
 {-# OPTIONS_GHC -fno-warn-unused-binds #-}
 
-#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 707
+#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 705
 {-# LANGUAGE DataKinds #-}
 {-# LANGUAGE PolyKinds #-}
 #define USE_TYPE_LITS 1
 #endif
 
+#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 707
+#define USE_NEW_TYPE_LITS 1
+#endif
+
+#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 705 && __GLASGOW_HASKELL__ < 707
+#define USE_OLD_TYPE_LITS 1
+#endif
+
 {-# OPTIONS_GHC -fno-warn-missing-signatures #-}
 --------------------------------------------------------------------
 -- |
@@ -40,7 +47,6 @@
     Config
   , HasConfig(..)
   , hll
-  , numBits, numBuckets, smallRange, interRange, rawFact, alpha, bucketMask
   -- * ReifiesConfig
   , ReifiesConfig(..)
   , reifyConfig
@@ -83,13 +89,29 @@
   } deriving (Eq, Show, Generic)
 
 class HasConfig t where
-  config :: Getter t Config
+  config     :: Getter t Config
 
-makeLensesWith ?? ''Config $ classyRules
-  & generateSignatures .~ False
-  & createClass        .~ False
-  & createInstance     .~ False
+  numBits    :: Getter t Int
+  numBits     = config . to _numBits
 
+  numBuckets :: Getter t Int
+  numBuckets  = config . to _numBuckets
+
+  smallRange :: Getter t Double
+  smallRange  = config . to _smallRange
+
+  interRange :: Getter t Double
+  interRange  = config . to _interRange
+
+  rawFact    :: Getter t Double
+  rawFact     = config . to _rawFact
+
+  alpha      :: Getter t Double
+  alpha       = config . to _alpha
+
+  bucketMask :: Getter t Word32
+  bucketMask  = config . to _bucketMask
+
 instance HasConfig Config where
   config = id
   {-# INLINE config #-}
@@ -119,9 +141,15 @@
 class ReifiesConfig o where
   reflectConfig :: p o -> Config
 
-#ifdef USE_TYPE_LITS
+#ifdef USE_NEW_TYPE_LITS
 instance KnownNat n => ReifiesConfig (n :: Nat) where
   reflectConfig _ = hll $ fromInteger $ natVal (Proxy :: Proxy n)
+  {-# INLINE reflectConfig #-}
+#endif
+
+#ifdef USE_OLD_TYPE_LITS
+instance SingRep n Integer => ReifiesConfig (n :: Nat) where
+  reflectConfig _ = hll $ fromInteger $ withSing $ \(x :: Sing n) -> fromSing x
   {-# INLINE reflectConfig #-}
 #endif
 
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
@@ -9,7 +9,6 @@
 {-# LANGUAGE RankNTypes                #-}
 {-# LANGUAGE RecordWildCards           #-}
 {-# LANGUAGE ScopedTypeVariables       #-}
-{-# LANGUAGE TemplateHaskell           #-}
 {-# LANGUAGE TypeFamilies              #-}
 {-# LANGUAGE UndecidableInstances      #-}
 {-# OPTIONS_GHC -fno-cse #-}
@@ -104,7 +103,11 @@
 
 instance Serialize (HyperLogLog p)
 
-makeClassy ''HyperLogLog
+class HasHyperLogLog a p | a -> p where
+  hyperLogLog :: Lens' a (HyperLogLog p)
+
+instance HasHyperLogLog (HyperLogLog p) p where
+  hyperLogLog = id
 
 _HyperLogLog :: Iso' (HyperLogLog p) (V.Vector Rank)
 _HyperLogLog = iso runHyperLogLog HyperLogLog
