diff --git a/Changelog.md b/Changelog.md
--- a/Changelog.md
+++ b/Changelog.md
@@ -1,5 +1,8 @@
 # Changelog for `proto-lens-combinators`
 
+## v0.1.0.10
+- Bump the dependency on `base` for `ghc-8.4.2`.
+
 ## v0.1.0.9
 - Track proto-lens change: separate types into their own module. (#100)
 - Remove support for `ghc-7.10`. (#136)
diff --git a/dist/build/autogen/Proto/Combinators.hs b/dist/build/autogen/Proto/Combinators.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/autogen/Proto/Combinators.hs
@@ -0,0 +1,251 @@
+{- This file was auto-generated from combinators.proto by the proto-lens-protoc program. -}
+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies,
+  UndecidableInstances, GeneralizedNewtypeDeriving,
+  MultiParamTypeClasses, FlexibleContexts, FlexibleInstances,
+  PatternSynonyms, MagicHash, NoImplicitPrelude, DataKinds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports#-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports#-}
+module Proto.Combinators (Foo(..), Foo'Bar(..)) where
+import qualified Data.ProtoLens.Reexport.Lens.Labels.Prism
+       as Lens.Labels.Prism
+import qualified Data.ProtoLens.Reexport.Prelude as Prelude
+import qualified Data.ProtoLens.Reexport.Data.Int as Data.Int
+import qualified Data.ProtoLens.Reexport.Data.Word as Data.Word
+import qualified Data.ProtoLens.Reexport.Data.ProtoLens
+       as Data.ProtoLens
+import qualified
+       Data.ProtoLens.Reexport.Data.ProtoLens.Message.Enum
+       as Data.ProtoLens.Message.Enum
+import qualified
+       Data.ProtoLens.Reexport.Data.ProtoLens.Service.Types
+       as Data.ProtoLens.Service.Types
+import qualified Data.ProtoLens.Reexport.Lens.Family2
+       as Lens.Family2
+import qualified Data.ProtoLens.Reexport.Lens.Family2.Unchecked
+       as Lens.Family2.Unchecked
+import qualified Data.ProtoLens.Reexport.Data.Default.Class
+       as Data.Default.Class
+import qualified Data.ProtoLens.Reexport.Data.Text as Data.Text
+import qualified Data.ProtoLens.Reexport.Data.Map as Data.Map
+import qualified Data.ProtoLens.Reexport.Data.ByteString
+       as Data.ByteString
+import qualified Data.ProtoLens.Reexport.Data.ByteString.Char8
+       as Data.ByteString.Char8
+import qualified Data.ProtoLens.Reexport.Lens.Labels as Lens.Labels
+import qualified Data.ProtoLens.Reexport.Text.Read as Text.Read
+
+{- | Fields :
+
+    * 'Proto.Combinators_Fields.quux' @:: Lens' Foo Data.Int.Int32@
+    * 'Proto.Combinators_Fields.maybe'quux' @:: Lens' Foo (Prelude.Maybe Data.Int.Int32)@
+    * 'Proto.Combinators_Fields.foo' @:: Lens' Foo Foo'Bar@
+    * 'Proto.Combinators_Fields.maybe'foo' @:: Lens' Foo (Prelude.Maybe Foo'Bar)@
+    * 'Proto.Combinators_Fields.bar' @:: Lens' Foo Foo'Bar@
+    * 'Proto.Combinators_Fields.maybe'bar' @:: Lens' Foo (Prelude.Maybe Foo'Bar)@
+    * 'Proto.Combinators_Fields.baz' @:: Lens' Foo Foo'Bar@
+    * 'Proto.Combinators_Fields.maybe'baz' @:: Lens' Foo (Prelude.Maybe Foo'Bar)@
+ -}
+data Foo = Foo{_Foo'quux :: !(Prelude.Maybe Data.Int.Int32),
+               _Foo'foo :: !(Prelude.Maybe Foo'Bar),
+               _Foo'bar :: !(Prelude.Maybe Foo'Bar),
+               _Foo'baz :: !(Prelude.Maybe Foo'Bar),
+               _Foo'_unknownFields :: !Data.ProtoLens.FieldSet}
+         deriving (Prelude.Show, Prelude.Eq, Prelude.Ord)
+instance (Lens.Labels.HasLens' f Foo x a, a ~ b) =>
+         Lens.Labels.HasLens f Foo Foo x a b
+         where
+        lensOf = Lens.Labels.lensOf'
+instance Prelude.Functor f =>
+         Lens.Labels.HasLens' f Foo "quux" (Data.Int.Int32)
+         where
+        lensOf' _
+          = (Prelude..)
+              (Lens.Family2.Unchecked.lens _Foo'quux
+                 (\ x__ y__ -> x__{_Foo'quux = y__}))
+              (Data.ProtoLens.maybeLens Data.ProtoLens.fieldDefault)
+instance Prelude.Functor f =>
+         Lens.Labels.HasLens' f Foo "maybe'quux"
+           (Prelude.Maybe Data.Int.Int32)
+         where
+        lensOf' _
+          = (Prelude..)
+              (Lens.Family2.Unchecked.lens _Foo'quux
+                 (\ x__ y__ -> x__{_Foo'quux = y__}))
+              Prelude.id
+instance Prelude.Functor f =>
+         Lens.Labels.HasLens' f Foo "foo" (Foo'Bar)
+         where
+        lensOf' _
+          = (Prelude..)
+              (Lens.Family2.Unchecked.lens _Foo'foo
+                 (\ x__ y__ -> x__{_Foo'foo = y__}))
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+instance Prelude.Functor f =>
+         Lens.Labels.HasLens' f Foo "maybe'foo" (Prelude.Maybe Foo'Bar)
+         where
+        lensOf' _
+          = (Prelude..)
+              (Lens.Family2.Unchecked.lens _Foo'foo
+                 (\ x__ y__ -> x__{_Foo'foo = y__}))
+              Prelude.id
+instance Prelude.Functor f =>
+         Lens.Labels.HasLens' f Foo "bar" (Foo'Bar)
+         where
+        lensOf' _
+          = (Prelude..)
+              (Lens.Family2.Unchecked.lens _Foo'bar
+                 (\ x__ y__ -> x__{_Foo'bar = y__}))
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+instance Prelude.Functor f =>
+         Lens.Labels.HasLens' f Foo "maybe'bar" (Prelude.Maybe Foo'Bar)
+         where
+        lensOf' _
+          = (Prelude..)
+              (Lens.Family2.Unchecked.lens _Foo'bar
+                 (\ x__ y__ -> x__{_Foo'bar = y__}))
+              Prelude.id
+instance Prelude.Functor f =>
+         Lens.Labels.HasLens' f Foo "baz" (Foo'Bar)
+         where
+        lensOf' _
+          = (Prelude..)
+              (Lens.Family2.Unchecked.lens _Foo'baz
+                 (\ x__ y__ -> x__{_Foo'baz = y__}))
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+instance Prelude.Functor f =>
+         Lens.Labels.HasLens' f Foo "maybe'baz" (Prelude.Maybe Foo'Bar)
+         where
+        lensOf' _
+          = (Prelude..)
+              (Lens.Family2.Unchecked.lens _Foo'baz
+                 (\ x__ y__ -> x__{_Foo'baz = y__}))
+              Prelude.id
+instance Data.Default.Class.Default Foo where
+        def
+          = Foo{_Foo'quux = Prelude.Nothing, _Foo'foo = Prelude.Nothing,
+                _Foo'bar = Prelude.Nothing, _Foo'baz = Prelude.Nothing,
+                _Foo'_unknownFields = ([])}
+instance Data.ProtoLens.Message Foo where
+        messageName _ = Data.Text.pack "combinators.Foo"
+        fieldsByTag
+          = let quux__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "quux"
+                      (Data.ProtoLens.ScalarField Data.ProtoLens.Int32Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)
+                      (Data.ProtoLens.OptionalField
+                         (Lens.Labels.lensOf
+                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'quux")))
+                      :: Data.ProtoLens.FieldDescriptor Foo
+                foo__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "foo"
+                      (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::
+                         Data.ProtoLens.FieldTypeDescriptor Foo'Bar)
+                      (Data.ProtoLens.OptionalField
+                         (Lens.Labels.lensOf
+                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'foo")))
+                      :: Data.ProtoLens.FieldDescriptor Foo
+                bar__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "bar"
+                      (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::
+                         Data.ProtoLens.FieldTypeDescriptor Foo'Bar)
+                      (Data.ProtoLens.OptionalField
+                         (Lens.Labels.lensOf
+                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'bar")))
+                      :: Data.ProtoLens.FieldDescriptor Foo
+                baz__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "baz"
+                      (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::
+                         Data.ProtoLens.FieldTypeDescriptor Foo'Bar)
+                      (Data.ProtoLens.OptionalField
+                         (Lens.Labels.lensOf
+                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'baz")))
+                      :: Data.ProtoLens.FieldDescriptor Foo
+              in
+              Data.Map.fromList
+                [(Data.ProtoLens.Tag 1, quux__field_descriptor),
+                 (Data.ProtoLens.Tag 2, foo__field_descriptor),
+                 (Data.ProtoLens.Tag 3, bar__field_descriptor),
+                 (Data.ProtoLens.Tag 4, baz__field_descriptor)]
+        unknownFields
+          = Lens.Family2.Unchecked.lens _Foo'_unknownFields
+              (\ x__ y__ -> x__{_Foo'_unknownFields = y__})
+{- | Fields :
+
+    * 'Proto.Combinators_Fields.fizz' @:: Lens' Foo'Bar Data.Int.Int32@
+    * 'Proto.Combinators_Fields.maybe'fizz' @:: Lens' Foo'Bar (Prelude.Maybe Data.Int.Int32)@
+    * 'Proto.Combinators_Fields.buzz' @:: Lens' Foo'Bar Data.Text.Text@
+    * 'Proto.Combinators_Fields.maybe'buzz' @:: Lens' Foo'Bar (Prelude.Maybe Data.Text.Text)@
+ -}
+data Foo'Bar = Foo'Bar{_Foo'Bar'fizz ::
+                       !(Prelude.Maybe Data.Int.Int32),
+                       _Foo'Bar'buzz :: !(Prelude.Maybe Data.Text.Text),
+                       _Foo'Bar'_unknownFields :: !Data.ProtoLens.FieldSet}
+             deriving (Prelude.Show, Prelude.Eq, Prelude.Ord)
+instance (Lens.Labels.HasLens' f Foo'Bar x a, a ~ b) =>
+         Lens.Labels.HasLens f Foo'Bar Foo'Bar x a b
+         where
+        lensOf = Lens.Labels.lensOf'
+instance Prelude.Functor f =>
+         Lens.Labels.HasLens' f Foo'Bar "fizz" (Data.Int.Int32)
+         where
+        lensOf' _
+          = (Prelude..)
+              (Lens.Family2.Unchecked.lens _Foo'Bar'fizz
+                 (\ x__ y__ -> x__{_Foo'Bar'fizz = y__}))
+              (Data.ProtoLens.maybeLens Data.ProtoLens.fieldDefault)
+instance Prelude.Functor f =>
+         Lens.Labels.HasLens' f Foo'Bar "maybe'fizz"
+           (Prelude.Maybe Data.Int.Int32)
+         where
+        lensOf' _
+          = (Prelude..)
+              (Lens.Family2.Unchecked.lens _Foo'Bar'fizz
+                 (\ x__ y__ -> x__{_Foo'Bar'fizz = y__}))
+              Prelude.id
+instance Prelude.Functor f =>
+         Lens.Labels.HasLens' f Foo'Bar "buzz" (Data.Text.Text)
+         where
+        lensOf' _
+          = (Prelude..)
+              (Lens.Family2.Unchecked.lens _Foo'Bar'buzz
+                 (\ x__ y__ -> x__{_Foo'Bar'buzz = y__}))
+              (Data.ProtoLens.maybeLens Data.ProtoLens.fieldDefault)
+instance Prelude.Functor f =>
+         Lens.Labels.HasLens' f Foo'Bar "maybe'buzz"
+           (Prelude.Maybe Data.Text.Text)
+         where
+        lensOf' _
+          = (Prelude..)
+              (Lens.Family2.Unchecked.lens _Foo'Bar'buzz
+                 (\ x__ y__ -> x__{_Foo'Bar'buzz = y__}))
+              Prelude.id
+instance Data.Default.Class.Default Foo'Bar where
+        def
+          = Foo'Bar{_Foo'Bar'fizz = Prelude.Nothing,
+                    _Foo'Bar'buzz = Prelude.Nothing, _Foo'Bar'_unknownFields = ([])}
+instance Data.ProtoLens.Message Foo'Bar where
+        messageName _ = Data.Text.pack "combinators.Foo.Bar"
+        fieldsByTag
+          = let fizz__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "fizz"
+                      (Data.ProtoLens.ScalarField Data.ProtoLens.Int32Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)
+                      (Data.ProtoLens.OptionalField
+                         (Lens.Labels.lensOf
+                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'fizz")))
+                      :: Data.ProtoLens.FieldDescriptor Foo'Bar
+                buzz__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "buzz"
+                      (Data.ProtoLens.ScalarField Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.OptionalField
+                         (Lens.Labels.lensOf
+                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'buzz")))
+                      :: Data.ProtoLens.FieldDescriptor Foo'Bar
+              in
+              Data.Map.fromList
+                [(Data.ProtoLens.Tag 1, fizz__field_descriptor),
+                 (Data.ProtoLens.Tag 2, buzz__field_descriptor)]
+        unknownFields
+          = Lens.Family2.Unchecked.lens _Foo'Bar'_unknownFields
+              (\ x__ y__ -> x__{_Foo'Bar'_unknownFields = y__})
diff --git a/dist/build/autogen/Proto/Combinators_Fields.hs b/dist/build/autogen/Proto/Combinators_Fields.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/autogen/Proto/Combinators_Fields.hs
@@ -0,0 +1,106 @@
+{- This file was auto-generated from combinators.proto by the proto-lens-protoc program. -}
+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies,
+  UndecidableInstances, GeneralizedNewtypeDeriving,
+  MultiParamTypeClasses, FlexibleContexts, FlexibleInstances,
+  PatternSynonyms, MagicHash, NoImplicitPrelude, DataKinds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports#-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports#-}
+module Proto.Combinators_Fields where
+import qualified Data.ProtoLens.Reexport.Prelude as Prelude
+import qualified Data.ProtoLens.Reexport.Data.Int as Data.Int
+import qualified Data.ProtoLens.Reexport.Data.Word as Data.Word
+import qualified Data.ProtoLens.Reexport.Data.ProtoLens
+       as Data.ProtoLens
+import qualified
+       Data.ProtoLens.Reexport.Data.ProtoLens.Message.Enum
+       as Data.ProtoLens.Message.Enum
+import qualified
+       Data.ProtoLens.Reexport.Data.ProtoLens.Service.Types
+       as Data.ProtoLens.Service.Types
+import qualified Data.ProtoLens.Reexport.Lens.Family2
+       as Lens.Family2
+import qualified Data.ProtoLens.Reexport.Lens.Family2.Unchecked
+       as Lens.Family2.Unchecked
+import qualified Data.ProtoLens.Reexport.Data.Default.Class
+       as Data.Default.Class
+import qualified Data.ProtoLens.Reexport.Data.Text as Data.Text
+import qualified Data.ProtoLens.Reexport.Data.Map as Data.Map
+import qualified Data.ProtoLens.Reexport.Data.ByteString
+       as Data.ByteString
+import qualified Data.ProtoLens.Reexport.Data.ByteString.Char8
+       as Data.ByteString.Char8
+import qualified Data.ProtoLens.Reexport.Lens.Labels as Lens.Labels
+import qualified Data.ProtoLens.Reexport.Text.Read as Text.Read
+
+bar ::
+    forall f s t a b . (Lens.Labels.HasLens f s t "bar" a b) =>
+      Lens.Family2.LensLike f s t a b
+bar
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "bar")
+baz ::
+    forall f s t a b . (Lens.Labels.HasLens f s t "baz" a b) =>
+      Lens.Family2.LensLike f s t a b
+baz
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "baz")
+buzz ::
+     forall f s t a b . (Lens.Labels.HasLens f s t "buzz" a b) =>
+       Lens.Family2.LensLike f s t a b
+buzz
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "buzz")
+fizz ::
+     forall f s t a b . (Lens.Labels.HasLens f s t "fizz" a b) =>
+       Lens.Family2.LensLike f s t a b
+fizz
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fizz")
+foo ::
+    forall f s t a b . (Lens.Labels.HasLens f s t "foo" a b) =>
+      Lens.Family2.LensLike f s t a b
+foo
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "foo")
+maybe'bar ::
+          forall f s t a b . (Lens.Labels.HasLens f s t "maybe'bar" a b) =>
+            Lens.Family2.LensLike f s t a b
+maybe'bar
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'bar")
+maybe'baz ::
+          forall f s t a b . (Lens.Labels.HasLens f s t "maybe'baz" a b) =>
+            Lens.Family2.LensLike f s t a b
+maybe'baz
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'baz")
+maybe'buzz ::
+           forall f s t a b . (Lens.Labels.HasLens f s t "maybe'buzz" a b) =>
+             Lens.Family2.LensLike f s t a b
+maybe'buzz
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'buzz")
+maybe'fizz ::
+           forall f s t a b . (Lens.Labels.HasLens f s t "maybe'fizz" a b) =>
+             Lens.Family2.LensLike f s t a b
+maybe'fizz
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'fizz")
+maybe'foo ::
+          forall f s t a b . (Lens.Labels.HasLens f s t "maybe'foo" a b) =>
+            Lens.Family2.LensLike f s t a b
+maybe'foo
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'foo")
+maybe'quux ::
+           forall f s t a b . (Lens.Labels.HasLens f s t "maybe'quux" a b) =>
+             Lens.Family2.LensLike f s t a b
+maybe'quux
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'quux")
+quux ::
+     forall f s t a b . (Lens.Labels.HasLens f s t "quux" a b) =>
+       Lens.Family2.LensLike f s t a b
+quux
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "quux")
diff --git a/proto-lens-combinators.cabal b/proto-lens-combinators.cabal
--- a/proto-lens-combinators.cabal
+++ b/proto-lens-combinators.cabal
@@ -2,10 +2,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: e13602bc73aef7729ccbfbafa950e439013500430b79b23780690aa40613a998
+-- hash: a9cfc8f9e6ec5f7d4f2af514f3781c0f7142583202d696d75dffbdb5f14eeca1
 
 name:           proto-lens-combinators
-version:        0.1.0.9
+version:        0.1.0.10
 synopsis:       Utilities functions to proto-lens.
 description:    Useful things for working with protos.
 category:       Data
@@ -31,14 +31,14 @@
 custom-setup
   setup-depends:
       Cabal
-    , base >=4.8 && <4.11
+    , base >=4.8 && <4.12
     , proto-lens-protoc ==0.3.*
 
 library
   hs-source-dirs:
       src
   build-depends:
-      base >=4.8 && <4.11
+      base >=4.8 && <4.12
     , data-default-class >=0.0 && <0.2
     , lens-family ==1.2.*
     , proto-lens-protoc ==0.3.*
@@ -65,5 +65,5 @@
     , test-framework
     , test-framework-hunit
   other-modules:
-      Paths_proto_lens_combinators
+      Proto.Combinators Proto.Combinators_Fields
   default-language: Haskell2010
