diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,13 @@
+# Version 0.2
+
+- Field indexes of any unset field (message/repeated/oneof) are ignored in serialized payload to make possible rolling upgrades **BREAKING CHANGE**
+
+- Fully qualified names are used in generated Signable class instances source code to prevent possible shadowing issues (bugfix)
+
+- Signable class instances source code is generated in eta-reduced form to prevent possible shadowing issues (bugfix)
+
+- Provided code for special cases where protobuf field is named as Haskell keyword like `data`, `class`, `instance` etc (bugfix)
+
 # Version 0.1
 
 - Initial version.
diff --git a/signable.cabal b/signable.cabal
--- a/signable.cabal
+++ b/signable.cabal
@@ -4,12 +4,12 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 311dca41f71b08d906b034cedb1f0ad7e69aeaf71f0848717e5ca917085dcc1b
+-- hash: 96e4ab3b538617261b6805fe5eadfa87a8bffa2b67f0f684e7942568405df0e8
 
 name:           signable
-version:        0.1
+version:        0.2
 synopsis:       Deterministic serialisation and signatures with proto-lens support
-description:    You can find documentation at <http://hackage.haskell.org/package/signable/docs/Data-Signable.html hackage>
+description:    You can find documentation at <https://hackage.haskell.org/package/signable/docs/Data-Signable.html hackage>
 category:       Data, Cryptography
 homepage:       https://github.com/coingaming/signable#readme
 bug-reports:    https://github.com/coingaming/signable/issues
@@ -71,6 +71,10 @@
       Proto.GoogleProtobuf_Fields
       Proto.Number
       Proto.Number_Fields
+      Proto.RepeatedMsg
+      Proto.RepeatedMsg_Fields
+      Proto.ReservedKeyword
+      Proto.ReservedKeyword_Fields
       Proto.SignableOrphan
       Proto.Text
       Proto.Text_Fields
diff --git a/src/Data/Signable.hs b/src/Data/Signable.hs
--- a/src/Data/Signable.hs
+++ b/src/Data/Signable.hs
@@ -2,10 +2,9 @@
 -- One of the main difficulties of digital signature usage
 -- is necessity of determenistic data serialization agreement.
 -- This library provides `Signable` class which represents
--- the idea of such agreement.
---
--- Also worth mentioning generic <https://hackage.haskell.org/package/proto-lens proto-lens> compatible implementation
--- of serialization/signing algorithm described <https://github.com/coingaming/signable/blob/master/README.md here>.
+-- the idea of such agreement. Also worth mentioning generic
+-- <https://hackage.haskell.org/package/proto-lens proto-lens> compatible implementation
+-- of serialization\/signing algorithm described <https://github.com/coingaming/signable/blob/master/README.md here>.
 -- It's implemented as separate protoc plugin <https://hackage.haskell.org/package/signable-haskell-protoc signable-haskell-protoc>
 -- which generates `Signable` class instances for given proto-lens messages and enums.
 module Data.Signable
@@ -14,4 +13,4 @@
 where
 
 import Data.Signable.Class as X
-import Data.Signable.Util as X (safeFromIntegral)
+import Data.Signable.Util as X (ifThenElse, safeFromIntegral)
diff --git a/src/Data/Signable/Class.hs b/src/Data/Signable/Class.hs
--- a/src/Data/Signable/Class.hs
+++ b/src/Data/Signable/Class.hs
@@ -7,11 +7,13 @@
   ( -- * Key
     PubKey,
     PrvKey,
-    importPubKeyRaw,
+    importPubKeyDer,
     importPubKeyPem,
+    exportPubKeyDer,
     derivePubKey,
     importPrvKeyRaw,
     importPrvKeyPem,
+    exportPrvKeyRaw,
     newRandomPrvKey,
 
     -- * Sha256
@@ -27,7 +29,8 @@
 
     -- * Misc
     Alg (..),
-    SE (..),
+    SignableError (..),
+    ECPointFormat (..),
   )
 where
 
@@ -49,17 +52,22 @@
 data Alg = AlgSecp256k1
   deriving (Show)
 
-data SE
+data SignableError
   = InvalidPem
   | TooFewPemChunks
   | TooManyPemChunks
   | InvalidAsn1
   | TooFewAsn1Chunks
   | TooManyAsn1Chunks
-  | InvalidPubKeyRaw
+  | InvalidPubKeyDer
   | InvalidPrvKeyRaw
   deriving (Show)
 
+data ECPointFormat
+  = ECPointCompressed
+  | ECPointUncompressed
+  deriving (Eq, Show)
+
 newtype PubKey = PubKeySecp256k1 C.PubKey
 
 newtype PrvKey = PrvKeySecp256k1 C.SecKey
@@ -77,26 +85,29 @@
 -- TODO : add KeyKind argument later
 -- when we will have more algorithms
 --
-importPubKeyRaw :: Alg -> ByteString -> Maybe PubKey
-importPubKeyRaw AlgSecp256k1 = (PubKeySecp256k1 <$>) . C.importPubKey
+importPubKeyDer :: Alg -> ByteString -> Maybe PubKey
+importPubKeyDer AlgSecp256k1 = (PubKeySecp256k1 <$>) . C.importPubKey
 
-importPubKeyPem :: Alg -> ByteString -> Either SE PubKey
+importPubKeyPem :: Alg -> ByteString -> Either SignableError PubKey
 importPubKeyPem AlgSecp256k1 x0 =
   case parsePEM x0
     >>= parseASN1 (\case BitString (BitArray _ x) -> [x]; _ -> []) of
     Left e -> Left e
     Right x ->
-      case importPubKeyRaw AlgSecp256k1 x of
-        Nothing -> Left InvalidPubKeyRaw
+      case importPubKeyDer AlgSecp256k1 x of
+        Nothing -> Left InvalidPubKeyDer
         Just k -> Right k
 
+exportPubKeyDer :: ECPointFormat -> PubKey -> ByteString
+exportPubKeyDer f (PubKeySecp256k1 x) = C.exportPubKey (f == ECPointCompressed) x
+
 derivePubKey :: PrvKey -> PubKey
 derivePubKey (PrvKeySecp256k1 x) = PubKeySecp256k1 $ C.derivePubKey x
 
 importPrvKeyRaw :: Alg -> ByteString -> Maybe PrvKey
 importPrvKeyRaw AlgSecp256k1 = (PrvKeySecp256k1 <$>) . C.secKey
 
-importPrvKeyPem :: Alg -> ByteString -> Either SE PrvKey
+importPrvKeyPem :: Alg -> ByteString -> Either SignableError PrvKey
 importPrvKeyPem AlgSecp256k1 x0 =
   case parsePEM x0
     >>= parseASN1 (\case OctetString x -> [x]; _ -> []) of
@@ -106,6 +117,9 @@
         Nothing -> Left InvalidPrvKeyRaw
         Just k -> Right k
 
+exportPrvKeyRaw :: PrvKey -> ByteString
+exportPrvKeyRaw (PrvKeySecp256k1 x) = C.getSecKey x
+
 newRandomPrvKey :: (MonadIO m, MonadFail m) => Alg -> m PrvKey
 newRandomPrvKey AlgSecp256k1 = do
   r <- liftIO $ getRandomBytes 32
@@ -123,7 +137,7 @@
 exportSigDer :: Sig -> ByteString
 exportSigDer (SigSecp256k1 x) = C.exportSig x
 
-parsePEM :: ByteString -> Either SE PEM
+parsePEM :: ByteString -> Either SignableError PEM
 parsePEM x0 =
   case pemParseBS x0 of
     Left _ -> Left InvalidPem
@@ -131,7 +145,7 @@
     Right [x] -> Right x
     Right _ -> Left TooManyPemChunks
 
-parseASN1 :: (ASN1 -> [ByteString]) -> PEM -> Either SE ByteString
+parseASN1 :: (ASN1 -> [ByteString]) -> PEM -> Either SignableError ByteString
 parseASN1 f p = do
   xs0 <-
     first (const InvalidAsn1) $
diff --git a/src/Data/Signable/Util.hs b/src/Data/Signable/Util.hs
--- a/src/Data/Signable/Util.hs
+++ b/src/Data/Signable/Util.hs
@@ -1,6 +1,7 @@
 module Data.Signable.Util
   ( safeFromIntegral,
     liftEither,
+    ifThenElse,
   )
 where
 
@@ -21,3 +22,6 @@
 liftEither = \case
   Left x -> fail $ show x
   Right x -> return x
+
+ifThenElse :: (a -> Bool) -> (a -> b) -> (a -> b) -> a -> b
+ifThenElse p t f x = if p x then t x else f x
diff --git a/test/Proto/RepeatedMsg.hs b/test/Proto/RepeatedMsg.hs
new file mode 100644
--- /dev/null
+++ b/test/Proto/RepeatedMsg.hs
@@ -0,0 +1,314 @@
+{- This file was auto-generated from repeated_msg.proto by the proto-lens-protoc program. -}
+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies, UndecidableInstances, GeneralizedNewtypeDeriving, MultiParamTypeClasses, FlexibleContexts, FlexibleInstances, PatternSynonyms, MagicHash, NoImplicitPrelude, DataKinds, BangPatterns, TypeApplications, OverloadedStrings, DerivingStrategies#-}
+{-# OPTIONS_GHC -Wno-unused-imports#-}
+{-# OPTIONS_GHC -Wno-duplicate-exports#-}
+{-# OPTIONS_GHC -Wno-dodgy-exports#-}
+module Proto.RepeatedMsg (
+        Payload(), Payload'Msg()
+    ) where
+import qualified Data.ProtoLens.Runtime.Control.DeepSeq as Control.DeepSeq
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Prism as Data.ProtoLens.Prism
+import qualified Data.ProtoLens.Runtime.Prelude as Prelude
+import qualified Data.ProtoLens.Runtime.Data.Int as Data.Int
+import qualified Data.ProtoLens.Runtime.Data.Monoid as Data.Monoid
+import qualified Data.ProtoLens.Runtime.Data.Word as Data.Word
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens as Data.ProtoLens
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Bytes as Data.ProtoLens.Encoding.Bytes
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Growing as Data.ProtoLens.Encoding.Growing
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Parser.Unsafe as Data.ProtoLens.Encoding.Parser.Unsafe
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Wire as Data.ProtoLens.Encoding.Wire
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Field as Data.ProtoLens.Field
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Message.Enum as Data.ProtoLens.Message.Enum
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Service.Types as Data.ProtoLens.Service.Types
+import qualified Data.ProtoLens.Runtime.Lens.Family2 as Lens.Family2
+import qualified Data.ProtoLens.Runtime.Lens.Family2.Unchecked as Lens.Family2.Unchecked
+import qualified Data.ProtoLens.Runtime.Data.Text as Data.Text
+import qualified Data.ProtoLens.Runtime.Data.Map as Data.Map
+import qualified Data.ProtoLens.Runtime.Data.ByteString as Data.ByteString
+import qualified Data.ProtoLens.Runtime.Data.ByteString.Char8 as Data.ByteString.Char8
+import qualified Data.ProtoLens.Runtime.Data.Text.Encoding as Data.Text.Encoding
+import qualified Data.ProtoLens.Runtime.Data.Vector as Data.Vector
+import qualified Data.ProtoLens.Runtime.Data.Vector.Generic as Data.Vector.Generic
+import qualified Data.ProtoLens.Runtime.Data.Vector.Unboxed as Data.Vector.Unboxed
+import qualified Data.ProtoLens.Runtime.Text.Read as Text.Read
+{- | Fields :
+     
+         * 'Proto.RepeatedMsg_Fields.msg' @:: Lens' Payload [Payload'Msg]@
+         * 'Proto.RepeatedMsg_Fields.vec'msg' @:: Lens' Payload (Data.Vector.Vector Payload'Msg)@ -}
+data Payload
+  = Payload'_constructor {_Payload'msg :: !(Data.Vector.Vector Payload'Msg),
+                          _Payload'_unknownFields :: !Data.ProtoLens.FieldSet}
+  deriving stock (Prelude.Eq, Prelude.Ord)
+instance Prelude.Show Payload where
+  showsPrec _ __x __s
+    = Prelude.showChar
+        '{'
+        (Prelude.showString
+           (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))
+instance Data.ProtoLens.Field.HasField Payload "msg" [Payload'Msg] where
+  fieldOf _
+    = (Prelude..)
+        (Lens.Family2.Unchecked.lens
+           _Payload'msg (\ x__ y__ -> x__ {_Payload'msg = y__}))
+        (Lens.Family2.Unchecked.lens
+           Data.Vector.Generic.toList
+           (\ _ y__ -> Data.Vector.Generic.fromList y__))
+instance Data.ProtoLens.Field.HasField Payload "vec'msg" (Data.Vector.Vector Payload'Msg) where
+  fieldOf _
+    = (Prelude..)
+        (Lens.Family2.Unchecked.lens
+           _Payload'msg (\ x__ y__ -> x__ {_Payload'msg = y__}))
+        Prelude.id
+instance Data.ProtoLens.Message Payload where
+  messageName _ = Data.Text.pack "RepeatedMsg.Payload"
+  packedMessageDescriptor _
+    = "\n\
+      \\aPayload\DC2*\n\
+      \\ETXmsg\CAN\SOH \ETX(\v2\CAN.RepeatedMsg.Payload.MsgR\ETXmsg\SUB\DC3\n\
+      \\ETXMsg\DC2\f\n\
+      \\SOHx\CAN\SOH \SOH(\rR\SOHx"
+  packedFileDescriptor _ = packedFileDescriptor
+  fieldsByTag
+    = let
+        msg__field_descriptor
+          = Data.ProtoLens.FieldDescriptor
+              "msg"
+              (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::
+                 Data.ProtoLens.FieldTypeDescriptor Payload'Msg)
+              (Data.ProtoLens.RepeatedField
+                 Data.ProtoLens.Unpacked (Data.ProtoLens.Field.field @"msg")) ::
+              Data.ProtoLens.FieldDescriptor Payload
+      in
+        Data.Map.fromList [(Data.ProtoLens.Tag 1, msg__field_descriptor)]
+  unknownFields
+    = Lens.Family2.Unchecked.lens
+        _Payload'_unknownFields
+        (\ x__ y__ -> x__ {_Payload'_unknownFields = y__})
+  defMessage
+    = Payload'_constructor
+        {_Payload'msg = Data.Vector.Generic.empty,
+         _Payload'_unknownFields = []}
+  parseMessage
+    = let
+        loop ::
+          Payload
+          -> Data.ProtoLens.Encoding.Growing.Growing Data.Vector.Vector Data.ProtoLens.Encoding.Growing.RealWorld Payload'Msg
+             -> Data.ProtoLens.Encoding.Bytes.Parser Payload
+        loop x mutable'msg
+          = do end <- Data.ProtoLens.Encoding.Bytes.atEnd
+               if end then
+                   do frozen'msg <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO
+                                      (Data.ProtoLens.Encoding.Growing.unsafeFreeze mutable'msg)
+                      (let missing = []
+                       in
+                         if Prelude.null missing then
+                             Prelude.return ()
+                         else
+                             Prelude.fail
+                               ((Prelude.++)
+                                  "Missing required fields: "
+                                  (Prelude.show (missing :: [Prelude.String]))))
+                      Prelude.return
+                        (Lens.Family2.over
+                           Data.ProtoLens.unknownFields
+                           (\ !t -> Prelude.reverse t)
+                           (Lens.Family2.set
+                              (Data.ProtoLens.Field.field @"vec'msg") frozen'msg x))
+               else
+                   do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt
+                      case tag of
+                        10
+                          -> do !y <- (Data.ProtoLens.Encoding.Bytes.<?>)
+                                        (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt
+                                            Data.ProtoLens.Encoding.Bytes.isolate
+                                              (Prelude.fromIntegral len)
+                                              Data.ProtoLens.parseMessage)
+                                        "msg"
+                                v <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO
+                                       (Data.ProtoLens.Encoding.Growing.append mutable'msg y)
+                                loop x v
+                        wire
+                          -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire
+                                        wire
+                                loop
+                                  (Lens.Family2.over
+                                     Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)
+                                  mutable'msg
+      in
+        (Data.ProtoLens.Encoding.Bytes.<?>)
+          (do mutable'msg <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO
+                               Data.ProtoLens.Encoding.Growing.new
+              loop Data.ProtoLens.defMessage mutable'msg)
+          "Payload"
+  buildMessage
+    = \ _x
+        -> (Data.Monoid.<>)
+             (Data.ProtoLens.Encoding.Bytes.foldMapBuilder
+                (\ _v
+                   -> (Data.Monoid.<>)
+                        (Data.ProtoLens.Encoding.Bytes.putVarInt 10)
+                        ((Prelude..)
+                           (\ bs
+                              -> (Data.Monoid.<>)
+                                   (Data.ProtoLens.Encoding.Bytes.putVarInt
+                                      (Prelude.fromIntegral (Data.ByteString.length bs)))
+                                   (Data.ProtoLens.Encoding.Bytes.putBytes bs))
+                           Data.ProtoLens.encodeMessage
+                           _v))
+                (Lens.Family2.view (Data.ProtoLens.Field.field @"vec'msg") _x))
+             (Data.ProtoLens.Encoding.Wire.buildFieldSet
+                (Lens.Family2.view Data.ProtoLens.unknownFields _x))
+instance Control.DeepSeq.NFData Payload where
+  rnf
+    = \ x__
+        -> Control.DeepSeq.deepseq
+             (_Payload'_unknownFields x__)
+             (Control.DeepSeq.deepseq (_Payload'msg x__) ())
+{- | Fields :
+     
+         * 'Proto.RepeatedMsg_Fields.x' @:: Lens' Payload'Msg Data.Word.Word32@ -}
+data Payload'Msg
+  = Payload'Msg'_constructor {_Payload'Msg'x :: !Data.Word.Word32,
+                              _Payload'Msg'_unknownFields :: !Data.ProtoLens.FieldSet}
+  deriving stock (Prelude.Eq, Prelude.Ord)
+instance Prelude.Show Payload'Msg where
+  showsPrec _ __x __s
+    = Prelude.showChar
+        '{'
+        (Prelude.showString
+           (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))
+instance Data.ProtoLens.Field.HasField Payload'Msg "x" Data.Word.Word32 where
+  fieldOf _
+    = (Prelude..)
+        (Lens.Family2.Unchecked.lens
+           _Payload'Msg'x (\ x__ y__ -> x__ {_Payload'Msg'x = y__}))
+        Prelude.id
+instance Data.ProtoLens.Message Payload'Msg where
+  messageName _ = Data.Text.pack "RepeatedMsg.Payload.Msg"
+  packedMessageDescriptor _
+    = "\n\
+      \\ETXMsg\DC2\f\n\
+      \\SOHx\CAN\SOH \SOH(\rR\SOHx"
+  packedFileDescriptor _ = packedFileDescriptor
+  fieldsByTag
+    = let
+        x__field_descriptor
+          = Data.ProtoLens.FieldDescriptor
+              "x"
+              (Data.ProtoLens.ScalarField Data.ProtoLens.UInt32Field ::
+                 Data.ProtoLens.FieldTypeDescriptor Data.Word.Word32)
+              (Data.ProtoLens.PlainField
+                 Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"x")) ::
+              Data.ProtoLens.FieldDescriptor Payload'Msg
+      in Data.Map.fromList [(Data.ProtoLens.Tag 1, x__field_descriptor)]
+  unknownFields
+    = Lens.Family2.Unchecked.lens
+        _Payload'Msg'_unknownFields
+        (\ x__ y__ -> x__ {_Payload'Msg'_unknownFields = y__})
+  defMessage
+    = Payload'Msg'_constructor
+        {_Payload'Msg'x = Data.ProtoLens.fieldDefault,
+         _Payload'Msg'_unknownFields = []}
+  parseMessage
+    = let
+        loop ::
+          Payload'Msg -> Data.ProtoLens.Encoding.Bytes.Parser Payload'Msg
+        loop x
+          = do end <- Data.ProtoLens.Encoding.Bytes.atEnd
+               if end then
+                   do (let missing = []
+                       in
+                         if Prelude.null missing then
+                             Prelude.return ()
+                         else
+                             Prelude.fail
+                               ((Prelude.++)
+                                  "Missing required fields: "
+                                  (Prelude.show (missing :: [Prelude.String]))))
+                      Prelude.return
+                        (Lens.Family2.over
+                           Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)
+               else
+                   do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt
+                      case tag of
+                        8 -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)
+                                       (Prelude.fmap
+                                          Prelude.fromIntegral
+                                          Data.ProtoLens.Encoding.Bytes.getVarInt)
+                                       "x"
+                                loop (Lens.Family2.set (Data.ProtoLens.Field.field @"x") y x)
+                        wire
+                          -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire
+                                        wire
+                                loop
+                                  (Lens.Family2.over
+                                     Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)
+      in
+        (Data.ProtoLens.Encoding.Bytes.<?>)
+          (do loop Data.ProtoLens.defMessage) "Msg"
+  buildMessage
+    = \ _x
+        -> (Data.Monoid.<>)
+             (let _v = Lens.Family2.view (Data.ProtoLens.Field.field @"x") _x
+              in
+                if (Prelude.==) _v Data.ProtoLens.fieldDefault then
+                    Data.Monoid.mempty
+                else
+                    (Data.Monoid.<>)
+                      (Data.ProtoLens.Encoding.Bytes.putVarInt 8)
+                      ((Prelude..)
+                         Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral _v))
+             (Data.ProtoLens.Encoding.Wire.buildFieldSet
+                (Lens.Family2.view Data.ProtoLens.unknownFields _x))
+instance Control.DeepSeq.NFData Payload'Msg where
+  rnf
+    = \ x__
+        -> Control.DeepSeq.deepseq
+             (_Payload'Msg'_unknownFields x__)
+             (Control.DeepSeq.deepseq (_Payload'Msg'x x__) ())
+packedFileDescriptor :: Data.ByteString.ByteString
+packedFileDescriptor
+  = "\n\
+    \\DC2repeated_msg.proto\DC2\vRepeatedMsg\"J\n\
+    \\aPayload\DC2*\n\
+    \\ETXmsg\CAN\SOH \ETX(\v2\CAN.RepeatedMsg.Payload.MsgR\ETXmsg\SUB\DC3\n\
+    \\ETXMsg\DC2\f\n\
+    \\SOHx\CAN\SOH \SOH(\rR\SOHxJ\229\SOH\n\
+    \\ACK\DC2\EOT\NUL\NUL\b\SOH\n\
+    \\b\n\
+    \\SOH\f\DC2\ETX\NUL\NUL\DC2\n\
+    \\b\n\
+    \\SOH\STX\DC2\ETX\SOH\NUL\DC4\n\
+    \\n\
+    \\n\
+    \\STX\EOT\NUL\DC2\EOT\ETX\NUL\b\SOH\n\
+    \\n\
+    \\n\
+    \\ETX\EOT\NUL\SOH\DC2\ETX\ETX\b\SI\n\
+    \\v\n\
+    \\EOT\EOT\NUL\STX\NUL\DC2\ETX\EOT\STX\ETB\n\
+    \\f\n\
+    \\ENQ\EOT\NUL\STX\NUL\EOT\DC2\ETX\EOT\STX\n\
+    \\n\
+    \\f\n\
+    \\ENQ\EOT\NUL\STX\NUL\ACK\DC2\ETX\EOT\v\SO\n\
+    \\f\n\
+    \\ENQ\EOT\NUL\STX\NUL\SOH\DC2\ETX\EOT\SI\DC2\n\
+    \\f\n\
+    \\ENQ\EOT\NUL\STX\NUL\ETX\DC2\ETX\EOT\NAK\SYN\n\
+    \\f\n\
+    \\EOT\EOT\NUL\ETX\NUL\DC2\EOT\ENQ\STX\a\ETX\n\
+    \\f\n\
+    \\ENQ\EOT\NUL\ETX\NUL\SOH\DC2\ETX\ENQ\n\
+    \\r\n\
+    \\r\n\
+    \\ACK\EOT\NUL\ETX\NUL\STX\NUL\DC2\ETX\ACK\EOT\DC1\n\
+    \\SI\n\
+    \\a\EOT\NUL\ETX\NUL\STX\NUL\EOT\DC2\EOT\ACK\EOT\ENQ\SI\n\
+    \\SO\n\
+    \\a\EOT\NUL\ETX\NUL\STX\NUL\ENQ\DC2\ETX\ACK\EOT\n\
+    \\n\
+    \\SO\n\
+    \\a\EOT\NUL\ETX\NUL\STX\NUL\SOH\DC2\ETX\ACK\v\f\n\
+    \\SO\n\
+    \\a\EOT\NUL\ETX\NUL\STX\NUL\ETX\DC2\ETX\ACK\SI\DLEb\ACKproto3"
diff --git a/test/Proto/RepeatedMsg_Fields.hs b/test/Proto/RepeatedMsg_Fields.hs
new file mode 100644
--- /dev/null
+++ b/test/Proto/RepeatedMsg_Fields.hs
@@ -0,0 +1,44 @@
+{- This file was auto-generated from repeated_msg.proto by the proto-lens-protoc program. -}
+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies, UndecidableInstances, GeneralizedNewtypeDeriving, MultiParamTypeClasses, FlexibleContexts, FlexibleInstances, PatternSynonyms, MagicHash, NoImplicitPrelude, DataKinds, BangPatterns, TypeApplications, OverloadedStrings, DerivingStrategies#-}
+{-# OPTIONS_GHC -Wno-unused-imports#-}
+{-# OPTIONS_GHC -Wno-duplicate-exports#-}
+{-# OPTIONS_GHC -Wno-dodgy-exports#-}
+module Proto.RepeatedMsg_Fields where
+import qualified Data.ProtoLens.Runtime.Prelude as Prelude
+import qualified Data.ProtoLens.Runtime.Data.Int as Data.Int
+import qualified Data.ProtoLens.Runtime.Data.Monoid as Data.Monoid
+import qualified Data.ProtoLens.Runtime.Data.Word as Data.Word
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens as Data.ProtoLens
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Bytes as Data.ProtoLens.Encoding.Bytes
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Growing as Data.ProtoLens.Encoding.Growing
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Parser.Unsafe as Data.ProtoLens.Encoding.Parser.Unsafe
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Wire as Data.ProtoLens.Encoding.Wire
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Field as Data.ProtoLens.Field
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Message.Enum as Data.ProtoLens.Message.Enum
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Service.Types as Data.ProtoLens.Service.Types
+import qualified Data.ProtoLens.Runtime.Lens.Family2 as Lens.Family2
+import qualified Data.ProtoLens.Runtime.Lens.Family2.Unchecked as Lens.Family2.Unchecked
+import qualified Data.ProtoLens.Runtime.Data.Text as Data.Text
+import qualified Data.ProtoLens.Runtime.Data.Map as Data.Map
+import qualified Data.ProtoLens.Runtime.Data.ByteString as Data.ByteString
+import qualified Data.ProtoLens.Runtime.Data.ByteString.Char8 as Data.ByteString.Char8
+import qualified Data.ProtoLens.Runtime.Data.Text.Encoding as Data.Text.Encoding
+import qualified Data.ProtoLens.Runtime.Data.Vector as Data.Vector
+import qualified Data.ProtoLens.Runtime.Data.Vector.Generic as Data.Vector.Generic
+import qualified Data.ProtoLens.Runtime.Data.Vector.Unboxed as Data.Vector.Unboxed
+import qualified Data.ProtoLens.Runtime.Text.Read as Text.Read
+msg ::
+  forall f s a.
+  (Prelude.Functor f, Data.ProtoLens.Field.HasField s "msg" a) =>
+  Lens.Family2.LensLike' f s a
+msg = Data.ProtoLens.Field.field @"msg"
+vec'msg ::
+  forall f s a.
+  (Prelude.Functor f, Data.ProtoLens.Field.HasField s "vec'msg" a) =>
+  Lens.Family2.LensLike' f s a
+vec'msg = Data.ProtoLens.Field.field @"vec'msg"
+x ::
+  forall f s a.
+  (Prelude.Functor f, Data.ProtoLens.Field.HasField s "x" a) =>
+  Lens.Family2.LensLike' f s a
+x = Data.ProtoLens.Field.field @"x"
diff --git a/test/Proto/ReservedKeyword.hs b/test/Proto/ReservedKeyword.hs
new file mode 100644
--- /dev/null
+++ b/test/Proto/ReservedKeyword.hs
@@ -0,0 +1,754 @@
+{- This file was auto-generated from reserved_keyword.proto by the proto-lens-protoc program. -}
+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies, UndecidableInstances, GeneralizedNewtypeDeriving, MultiParamTypeClasses, FlexibleContexts, FlexibleInstances, PatternSynonyms, MagicHash, NoImplicitPrelude, DataKinds, BangPatterns, TypeApplications, OverloadedStrings, DerivingStrategies#-}
+{-# OPTIONS_GHC -Wno-unused-imports#-}
+{-# OPTIONS_GHC -Wno-duplicate-exports#-}
+{-# OPTIONS_GHC -Wno-dodgy-exports#-}
+module Proto.ReservedKeyword (
+        Payload(), Payload'List(), Payload'List'Either(..),
+        _Payload'List'X, _Payload'List'Xs
+    ) where
+import qualified Data.ProtoLens.Runtime.Control.DeepSeq as Control.DeepSeq
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Prism as Data.ProtoLens.Prism
+import qualified Data.ProtoLens.Runtime.Prelude as Prelude
+import qualified Data.ProtoLens.Runtime.Data.Int as Data.Int
+import qualified Data.ProtoLens.Runtime.Data.Monoid as Data.Monoid
+import qualified Data.ProtoLens.Runtime.Data.Word as Data.Word
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens as Data.ProtoLens
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Bytes as Data.ProtoLens.Encoding.Bytes
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Growing as Data.ProtoLens.Encoding.Growing
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Parser.Unsafe as Data.ProtoLens.Encoding.Parser.Unsafe
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Wire as Data.ProtoLens.Encoding.Wire
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Field as Data.ProtoLens.Field
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Message.Enum as Data.ProtoLens.Message.Enum
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Service.Types as Data.ProtoLens.Service.Types
+import qualified Data.ProtoLens.Runtime.Lens.Family2 as Lens.Family2
+import qualified Data.ProtoLens.Runtime.Lens.Family2.Unchecked as Lens.Family2.Unchecked
+import qualified Data.ProtoLens.Runtime.Data.Text as Data.Text
+import qualified Data.ProtoLens.Runtime.Data.Map as Data.Map
+import qualified Data.ProtoLens.Runtime.Data.ByteString as Data.ByteString
+import qualified Data.ProtoLens.Runtime.Data.ByteString.Char8 as Data.ByteString.Char8
+import qualified Data.ProtoLens.Runtime.Data.Text.Encoding as Data.Text.Encoding
+import qualified Data.ProtoLens.Runtime.Data.Vector as Data.Vector
+import qualified Data.ProtoLens.Runtime.Data.Vector.Generic as Data.Vector.Generic
+import qualified Data.ProtoLens.Runtime.Data.Vector.Unboxed as Data.Vector.Unboxed
+import qualified Data.ProtoLens.Runtime.Text.Read as Text.Read
+{- | Fields :
+     
+         * 'Proto.ReservedKeyword_Fields.module'' @:: Lens' Payload Data.ByteString.ByteString@
+         * 'Proto.ReservedKeyword_Fields.data'' @:: Lens' Payload [Payload'List]@
+         * 'Proto.ReservedKeyword_Fields.vec'data'' @:: Lens' Payload (Data.Vector.Vector Payload'List)@
+         * 'Proto.ReservedKeyword_Fields.type'' @:: Lens' Payload [Data.ByteString.ByteString]@
+         * 'Proto.ReservedKeyword_Fields.vec'type'' @:: Lens' Payload (Data.Vector.Vector Data.ByteString.ByteString)@
+         * 'Proto.ReservedKeyword_Fields.class'' @:: Lens' Payload Payload'List@
+         * 'Proto.ReservedKeyword_Fields.maybe'class'' @:: Lens' Payload (Prelude.Maybe Payload'List)@
+         * 'Proto.ReservedKeyword_Fields.instance'' @:: Lens' Payload Data.ByteString.ByteString@
+         * 'Proto.ReservedKeyword_Fields.if'' @:: Lens' Payload Prelude.Bool@ -}
+data Payload
+  = Payload'_constructor {_Payload'module' :: !Data.ByteString.ByteString,
+                          _Payload'data' :: !(Data.Vector.Vector Payload'List),
+                          _Payload'type' :: !(Data.Vector.Vector Data.ByteString.ByteString),
+                          _Payload'class' :: !(Prelude.Maybe Payload'List),
+                          _Payload'instance' :: !Data.ByteString.ByteString,
+                          _Payload'if' :: !Prelude.Bool,
+                          _Payload'_unknownFields :: !Data.ProtoLens.FieldSet}
+  deriving stock (Prelude.Eq, Prelude.Ord)
+instance Prelude.Show Payload where
+  showsPrec _ __x __s
+    = Prelude.showChar
+        '{'
+        (Prelude.showString
+           (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))
+instance Data.ProtoLens.Field.HasField Payload "module'" Data.ByteString.ByteString where
+  fieldOf _
+    = (Prelude..)
+        (Lens.Family2.Unchecked.lens
+           _Payload'module' (\ x__ y__ -> x__ {_Payload'module' = y__}))
+        Prelude.id
+instance Data.ProtoLens.Field.HasField Payload "data'" [Payload'List] where
+  fieldOf _
+    = (Prelude..)
+        (Lens.Family2.Unchecked.lens
+           _Payload'data' (\ x__ y__ -> x__ {_Payload'data' = y__}))
+        (Lens.Family2.Unchecked.lens
+           Data.Vector.Generic.toList
+           (\ _ y__ -> Data.Vector.Generic.fromList y__))
+instance Data.ProtoLens.Field.HasField Payload "vec'data'" (Data.Vector.Vector Payload'List) where
+  fieldOf _
+    = (Prelude..)
+        (Lens.Family2.Unchecked.lens
+           _Payload'data' (\ x__ y__ -> x__ {_Payload'data' = y__}))
+        Prelude.id
+instance Data.ProtoLens.Field.HasField Payload "type'" [Data.ByteString.ByteString] where
+  fieldOf _
+    = (Prelude..)
+        (Lens.Family2.Unchecked.lens
+           _Payload'type' (\ x__ y__ -> x__ {_Payload'type' = y__}))
+        (Lens.Family2.Unchecked.lens
+           Data.Vector.Generic.toList
+           (\ _ y__ -> Data.Vector.Generic.fromList y__))
+instance Data.ProtoLens.Field.HasField Payload "vec'type'" (Data.Vector.Vector Data.ByteString.ByteString) where
+  fieldOf _
+    = (Prelude..)
+        (Lens.Family2.Unchecked.lens
+           _Payload'type' (\ x__ y__ -> x__ {_Payload'type' = y__}))
+        Prelude.id
+instance Data.ProtoLens.Field.HasField Payload "class'" Payload'List where
+  fieldOf _
+    = (Prelude..)
+        (Lens.Family2.Unchecked.lens
+           _Payload'class' (\ x__ y__ -> x__ {_Payload'class' = y__}))
+        (Data.ProtoLens.maybeLens Data.ProtoLens.defMessage)
+instance Data.ProtoLens.Field.HasField Payload "maybe'class'" (Prelude.Maybe Payload'List) where
+  fieldOf _
+    = (Prelude..)
+        (Lens.Family2.Unchecked.lens
+           _Payload'class' (\ x__ y__ -> x__ {_Payload'class' = y__}))
+        Prelude.id
+instance Data.ProtoLens.Field.HasField Payload "instance'" Data.ByteString.ByteString where
+  fieldOf _
+    = (Prelude..)
+        (Lens.Family2.Unchecked.lens
+           _Payload'instance' (\ x__ y__ -> x__ {_Payload'instance' = y__}))
+        Prelude.id
+instance Data.ProtoLens.Field.HasField Payload "if'" Prelude.Bool where
+  fieldOf _
+    = (Prelude..)
+        (Lens.Family2.Unchecked.lens
+           _Payload'if' (\ x__ y__ -> x__ {_Payload'if' = y__}))
+        Prelude.id
+instance Data.ProtoLens.Message Payload where
+  messageName _ = Data.Text.pack "ReservedKeyword.Payload"
+  packedMessageDescriptor _
+    = "\n\
+      \\aPayload\DC2\SYN\n\
+      \\ACKmodule\CAN\SOH \SOH(\fR\ACKmodule\DC21\n\
+      \\EOTdata\CAN\STX \ETX(\v2\GS.ReservedKeyword.Payload.ListR\EOTdata\DC2\DC2\n\
+      \\EOTtype\CAN\ETX \ETX(\fR\EOTtype\DC23\n\
+      \\ENQclass\CAN\EOT \SOH(\v2\GS.ReservedKeyword.Payload.ListR\ENQclass\DC2\SUB\n\
+      \\binstance\CAN\ENQ \SOH(\fR\binstance\DC2\SO\n\
+      \\STXif\CAN\ACK \SOH(\bR\STXif\SUBQ\n\
+      \\EOTList\DC2\SO\n\
+      \\SOHx\CAN\SOH \SOH(\fH\NULR\SOHx\DC2/\n\
+      \\STXxs\CAN\STX \SOH(\v2\GS.ReservedKeyword.Payload.ListH\NULR\STXxsB\b\n\
+      \\ACKeither"
+  packedFileDescriptor _ = packedFileDescriptor
+  fieldsByTag
+    = let
+        module'__field_descriptor
+          = Data.ProtoLens.FieldDescriptor
+              "module"
+              (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::
+                 Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)
+              (Data.ProtoLens.PlainField
+                 Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"module'")) ::
+              Data.ProtoLens.FieldDescriptor Payload
+        data'__field_descriptor
+          = Data.ProtoLens.FieldDescriptor
+              "data"
+              (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::
+                 Data.ProtoLens.FieldTypeDescriptor Payload'List)
+              (Data.ProtoLens.RepeatedField
+                 Data.ProtoLens.Unpacked (Data.ProtoLens.Field.field @"data'")) ::
+              Data.ProtoLens.FieldDescriptor Payload
+        type'__field_descriptor
+          = Data.ProtoLens.FieldDescriptor
+              "type"
+              (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::
+                 Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)
+              (Data.ProtoLens.RepeatedField
+                 Data.ProtoLens.Unpacked (Data.ProtoLens.Field.field @"type'")) ::
+              Data.ProtoLens.FieldDescriptor Payload
+        class'__field_descriptor
+          = Data.ProtoLens.FieldDescriptor
+              "class"
+              (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::
+                 Data.ProtoLens.FieldTypeDescriptor Payload'List)
+              (Data.ProtoLens.OptionalField
+                 (Data.ProtoLens.Field.field @"maybe'class'")) ::
+              Data.ProtoLens.FieldDescriptor Payload
+        instance'__field_descriptor
+          = Data.ProtoLens.FieldDescriptor
+              "instance"
+              (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::
+                 Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)
+              (Data.ProtoLens.PlainField
+                 Data.ProtoLens.Optional
+                 (Data.ProtoLens.Field.field @"instance'")) ::
+              Data.ProtoLens.FieldDescriptor Payload
+        if'__field_descriptor
+          = Data.ProtoLens.FieldDescriptor
+              "if"
+              (Data.ProtoLens.ScalarField Data.ProtoLens.BoolField ::
+                 Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)
+              (Data.ProtoLens.PlainField
+                 Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"if'")) ::
+              Data.ProtoLens.FieldDescriptor Payload
+      in
+        Data.Map.fromList
+          [(Data.ProtoLens.Tag 1, module'__field_descriptor),
+           (Data.ProtoLens.Tag 2, data'__field_descriptor),
+           (Data.ProtoLens.Tag 3, type'__field_descriptor),
+           (Data.ProtoLens.Tag 4, class'__field_descriptor),
+           (Data.ProtoLens.Tag 5, instance'__field_descriptor),
+           (Data.ProtoLens.Tag 6, if'__field_descriptor)]
+  unknownFields
+    = Lens.Family2.Unchecked.lens
+        _Payload'_unknownFields
+        (\ x__ y__ -> x__ {_Payload'_unknownFields = y__})
+  defMessage
+    = Payload'_constructor
+        {_Payload'module' = Data.ProtoLens.fieldDefault,
+         _Payload'data' = Data.Vector.Generic.empty,
+         _Payload'type' = Data.Vector.Generic.empty,
+         _Payload'class' = Prelude.Nothing,
+         _Payload'instance' = Data.ProtoLens.fieldDefault,
+         _Payload'if' = Data.ProtoLens.fieldDefault,
+         _Payload'_unknownFields = []}
+  parseMessage
+    = let
+        loop ::
+          Payload
+          -> Data.ProtoLens.Encoding.Growing.Growing Data.Vector.Vector Data.ProtoLens.Encoding.Growing.RealWorld Payload'List
+             -> Data.ProtoLens.Encoding.Growing.Growing Data.Vector.Vector Data.ProtoLens.Encoding.Growing.RealWorld Data.ByteString.ByteString
+                -> Data.ProtoLens.Encoding.Bytes.Parser Payload
+        loop x mutable'data' mutable'type'
+          = do end <- Data.ProtoLens.Encoding.Bytes.atEnd
+               if end then
+                   do frozen'data' <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO
+                                        (Data.ProtoLens.Encoding.Growing.unsafeFreeze mutable'data')
+                      frozen'type' <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO
+                                        (Data.ProtoLens.Encoding.Growing.unsafeFreeze mutable'type')
+                      (let missing = []
+                       in
+                         if Prelude.null missing then
+                             Prelude.return ()
+                         else
+                             Prelude.fail
+                               ((Prelude.++)
+                                  "Missing required fields: "
+                                  (Prelude.show (missing :: [Prelude.String]))))
+                      Prelude.return
+                        (Lens.Family2.over
+                           Data.ProtoLens.unknownFields
+                           (\ !t -> Prelude.reverse t)
+                           (Lens.Family2.set
+                              (Data.ProtoLens.Field.field @"vec'data'")
+                              frozen'data'
+                              (Lens.Family2.set
+                                 (Data.ProtoLens.Field.field @"vec'type'") frozen'type' x)))
+               else
+                   do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt
+                      case tag of
+                        10
+                          -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)
+                                       (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt
+                                           Data.ProtoLens.Encoding.Bytes.getBytes
+                                             (Prelude.fromIntegral len))
+                                       "module"
+                                loop
+                                  (Lens.Family2.set (Data.ProtoLens.Field.field @"module'") y x)
+                                  mutable'data'
+                                  mutable'type'
+                        18
+                          -> do !y <- (Data.ProtoLens.Encoding.Bytes.<?>)
+                                        (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt
+                                            Data.ProtoLens.Encoding.Bytes.isolate
+                                              (Prelude.fromIntegral len)
+                                              Data.ProtoLens.parseMessage)
+                                        "data"
+                                v <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO
+                                       (Data.ProtoLens.Encoding.Growing.append mutable'data' y)
+                                loop x v mutable'type'
+                        26
+                          -> do !y <- (Data.ProtoLens.Encoding.Bytes.<?>)
+                                        (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt
+                                            Data.ProtoLens.Encoding.Bytes.getBytes
+                                              (Prelude.fromIntegral len))
+                                        "type"
+                                v <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO
+                                       (Data.ProtoLens.Encoding.Growing.append mutable'type' y)
+                                loop x mutable'data' v
+                        34
+                          -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)
+                                       (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt
+                                           Data.ProtoLens.Encoding.Bytes.isolate
+                                             (Prelude.fromIntegral len) Data.ProtoLens.parseMessage)
+                                       "class"
+                                loop
+                                  (Lens.Family2.set (Data.ProtoLens.Field.field @"class'") y x)
+                                  mutable'data'
+                                  mutable'type'
+                        42
+                          -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)
+                                       (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt
+                                           Data.ProtoLens.Encoding.Bytes.getBytes
+                                             (Prelude.fromIntegral len))
+                                       "instance"
+                                loop
+                                  (Lens.Family2.set (Data.ProtoLens.Field.field @"instance'") y x)
+                                  mutable'data'
+                                  mutable'type'
+                        48
+                          -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)
+                                       (Prelude.fmap
+                                          ((Prelude./=) 0) Data.ProtoLens.Encoding.Bytes.getVarInt)
+                                       "if"
+                                loop
+                                  (Lens.Family2.set (Data.ProtoLens.Field.field @"if'") y x)
+                                  mutable'data'
+                                  mutable'type'
+                        wire
+                          -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire
+                                        wire
+                                loop
+                                  (Lens.Family2.over
+                                     Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)
+                                  mutable'data'
+                                  mutable'type'
+      in
+        (Data.ProtoLens.Encoding.Bytes.<?>)
+          (do mutable'data' <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO
+                                 Data.ProtoLens.Encoding.Growing.new
+              mutable'type' <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO
+                                 Data.ProtoLens.Encoding.Growing.new
+              loop Data.ProtoLens.defMessage mutable'data' mutable'type')
+          "Payload"
+  buildMessage
+    = \ _x
+        -> (Data.Monoid.<>)
+             (let
+                _v = Lens.Family2.view (Data.ProtoLens.Field.field @"module'") _x
+              in
+                if (Prelude.==) _v Data.ProtoLens.fieldDefault then
+                    Data.Monoid.mempty
+                else
+                    (Data.Monoid.<>)
+                      (Data.ProtoLens.Encoding.Bytes.putVarInt 10)
+                      ((\ bs
+                          -> (Data.Monoid.<>)
+                               (Data.ProtoLens.Encoding.Bytes.putVarInt
+                                  (Prelude.fromIntegral (Data.ByteString.length bs)))
+                               (Data.ProtoLens.Encoding.Bytes.putBytes bs))
+                         _v))
+             ((Data.Monoid.<>)
+                (Data.ProtoLens.Encoding.Bytes.foldMapBuilder
+                   (\ _v
+                      -> (Data.Monoid.<>)
+                           (Data.ProtoLens.Encoding.Bytes.putVarInt 18)
+                           ((Prelude..)
+                              (\ bs
+                                 -> (Data.Monoid.<>)
+                                      (Data.ProtoLens.Encoding.Bytes.putVarInt
+                                         (Prelude.fromIntegral (Data.ByteString.length bs)))
+                                      (Data.ProtoLens.Encoding.Bytes.putBytes bs))
+                              Data.ProtoLens.encodeMessage
+                              _v))
+                   (Lens.Family2.view (Data.ProtoLens.Field.field @"vec'data'") _x))
+                ((Data.Monoid.<>)
+                   (Data.ProtoLens.Encoding.Bytes.foldMapBuilder
+                      (\ _v
+                         -> (Data.Monoid.<>)
+                              (Data.ProtoLens.Encoding.Bytes.putVarInt 26)
+                              ((\ bs
+                                  -> (Data.Monoid.<>)
+                                       (Data.ProtoLens.Encoding.Bytes.putVarInt
+                                          (Prelude.fromIntegral (Data.ByteString.length bs)))
+                                       (Data.ProtoLens.Encoding.Bytes.putBytes bs))
+                                 _v))
+                      (Lens.Family2.view (Data.ProtoLens.Field.field @"vec'type'") _x))
+                   ((Data.Monoid.<>)
+                      (case
+                           Lens.Family2.view (Data.ProtoLens.Field.field @"maybe'class'") _x
+                       of
+                         Prelude.Nothing -> Data.Monoid.mempty
+                         (Prelude.Just _v)
+                           -> (Data.Monoid.<>)
+                                (Data.ProtoLens.Encoding.Bytes.putVarInt 34)
+                                ((Prelude..)
+                                   (\ bs
+                                      -> (Data.Monoid.<>)
+                                           (Data.ProtoLens.Encoding.Bytes.putVarInt
+                                              (Prelude.fromIntegral (Data.ByteString.length bs)))
+                                           (Data.ProtoLens.Encoding.Bytes.putBytes bs))
+                                   Data.ProtoLens.encodeMessage
+                                   _v))
+                      ((Data.Monoid.<>)
+                         (let
+                            _v = Lens.Family2.view (Data.ProtoLens.Field.field @"instance'") _x
+                          in
+                            if (Prelude.==) _v Data.ProtoLens.fieldDefault then
+                                Data.Monoid.mempty
+                            else
+                                (Data.Monoid.<>)
+                                  (Data.ProtoLens.Encoding.Bytes.putVarInt 42)
+                                  ((\ bs
+                                      -> (Data.Monoid.<>)
+                                           (Data.ProtoLens.Encoding.Bytes.putVarInt
+                                              (Prelude.fromIntegral (Data.ByteString.length bs)))
+                                           (Data.ProtoLens.Encoding.Bytes.putBytes bs))
+                                     _v))
+                         ((Data.Monoid.<>)
+                            (let _v = Lens.Family2.view (Data.ProtoLens.Field.field @"if'") _x
+                             in
+                               if (Prelude.==) _v Data.ProtoLens.fieldDefault then
+                                   Data.Monoid.mempty
+                               else
+                                   (Data.Monoid.<>)
+                                     (Data.ProtoLens.Encoding.Bytes.putVarInt 48)
+                                     ((Prelude..)
+                                        Data.ProtoLens.Encoding.Bytes.putVarInt
+                                        (\ b -> if b then 1 else 0)
+                                        _v))
+                            (Data.ProtoLens.Encoding.Wire.buildFieldSet
+                               (Lens.Family2.view Data.ProtoLens.unknownFields _x)))))))
+instance Control.DeepSeq.NFData Payload where
+  rnf
+    = \ x__
+        -> Control.DeepSeq.deepseq
+             (_Payload'_unknownFields x__)
+             (Control.DeepSeq.deepseq
+                (_Payload'module' x__)
+                (Control.DeepSeq.deepseq
+                   (_Payload'data' x__)
+                   (Control.DeepSeq.deepseq
+                      (_Payload'type' x__)
+                      (Control.DeepSeq.deepseq
+                         (_Payload'class' x__)
+                         (Control.DeepSeq.deepseq
+                            (_Payload'instance' x__)
+                            (Control.DeepSeq.deepseq (_Payload'if' x__) ()))))))
+{- | Fields :
+     
+         * 'Proto.ReservedKeyword_Fields.maybe'either' @:: Lens' Payload'List (Prelude.Maybe Payload'List'Either)@
+         * 'Proto.ReservedKeyword_Fields.maybe'x' @:: Lens' Payload'List (Prelude.Maybe Data.ByteString.ByteString)@
+         * 'Proto.ReservedKeyword_Fields.x' @:: Lens' Payload'List Data.ByteString.ByteString@
+         * 'Proto.ReservedKeyword_Fields.maybe'xs' @:: Lens' Payload'List (Prelude.Maybe Payload'List)@
+         * 'Proto.ReservedKeyword_Fields.xs' @:: Lens' Payload'List Payload'List@ -}
+data Payload'List
+  = Payload'List'_constructor {_Payload'List'either :: !(Prelude.Maybe Payload'List'Either),
+                               _Payload'List'_unknownFields :: !Data.ProtoLens.FieldSet}
+  deriving stock (Prelude.Eq, Prelude.Ord)
+instance Prelude.Show Payload'List where
+  showsPrec _ __x __s
+    = Prelude.showChar
+        '{'
+        (Prelude.showString
+           (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))
+data Payload'List'Either
+  = Payload'List'X !Data.ByteString.ByteString |
+    Payload'List'Xs !Payload'List
+  deriving stock (Prelude.Show, Prelude.Eq, Prelude.Ord)
+instance Data.ProtoLens.Field.HasField Payload'List "maybe'either" (Prelude.Maybe Payload'List'Either) where
+  fieldOf _
+    = (Prelude..)
+        (Lens.Family2.Unchecked.lens
+           _Payload'List'either
+           (\ x__ y__ -> x__ {_Payload'List'either = y__}))
+        Prelude.id
+instance Data.ProtoLens.Field.HasField Payload'List "maybe'x" (Prelude.Maybe Data.ByteString.ByteString) where
+  fieldOf _
+    = (Prelude..)
+        (Lens.Family2.Unchecked.lens
+           _Payload'List'either
+           (\ x__ y__ -> x__ {_Payload'List'either = y__}))
+        (Lens.Family2.Unchecked.lens
+           (\ x__
+              -> case x__ of
+                   (Prelude.Just (Payload'List'X x__val)) -> Prelude.Just x__val
+                   _otherwise -> Prelude.Nothing)
+           (\ _ y__ -> Prelude.fmap Payload'List'X y__))
+instance Data.ProtoLens.Field.HasField Payload'List "x" Data.ByteString.ByteString where
+  fieldOf _
+    = (Prelude..)
+        (Lens.Family2.Unchecked.lens
+           _Payload'List'either
+           (\ x__ y__ -> x__ {_Payload'List'either = y__}))
+        ((Prelude..)
+           (Lens.Family2.Unchecked.lens
+              (\ x__
+                 -> case x__ of
+                      (Prelude.Just (Payload'List'X x__val)) -> Prelude.Just x__val
+                      _otherwise -> Prelude.Nothing)
+              (\ _ y__ -> Prelude.fmap Payload'List'X y__))
+           (Data.ProtoLens.maybeLens Data.ProtoLens.fieldDefault))
+instance Data.ProtoLens.Field.HasField Payload'List "maybe'xs" (Prelude.Maybe Payload'List) where
+  fieldOf _
+    = (Prelude..)
+        (Lens.Family2.Unchecked.lens
+           _Payload'List'either
+           (\ x__ y__ -> x__ {_Payload'List'either = y__}))
+        (Lens.Family2.Unchecked.lens
+           (\ x__
+              -> case x__ of
+                   (Prelude.Just (Payload'List'Xs x__val)) -> Prelude.Just x__val
+                   _otherwise -> Prelude.Nothing)
+           (\ _ y__ -> Prelude.fmap Payload'List'Xs y__))
+instance Data.ProtoLens.Field.HasField Payload'List "xs" Payload'List where
+  fieldOf _
+    = (Prelude..)
+        (Lens.Family2.Unchecked.lens
+           _Payload'List'either
+           (\ x__ y__ -> x__ {_Payload'List'either = y__}))
+        ((Prelude..)
+           (Lens.Family2.Unchecked.lens
+              (\ x__
+                 -> case x__ of
+                      (Prelude.Just (Payload'List'Xs x__val)) -> Prelude.Just x__val
+                      _otherwise -> Prelude.Nothing)
+              (\ _ y__ -> Prelude.fmap Payload'List'Xs y__))
+           (Data.ProtoLens.maybeLens Data.ProtoLens.defMessage))
+instance Data.ProtoLens.Message Payload'List where
+  messageName _ = Data.Text.pack "ReservedKeyword.Payload.List"
+  packedMessageDescriptor _
+    = "\n\
+      \\EOTList\DC2\SO\n\
+      \\SOHx\CAN\SOH \SOH(\fH\NULR\SOHx\DC2/\n\
+      \\STXxs\CAN\STX \SOH(\v2\GS.ReservedKeyword.Payload.ListH\NULR\STXxsB\b\n\
+      \\ACKeither"
+  packedFileDescriptor _ = packedFileDescriptor
+  fieldsByTag
+    = let
+        x__field_descriptor
+          = Data.ProtoLens.FieldDescriptor
+              "x"
+              (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::
+                 Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)
+              (Data.ProtoLens.OptionalField
+                 (Data.ProtoLens.Field.field @"maybe'x")) ::
+              Data.ProtoLens.FieldDescriptor Payload'List
+        xs__field_descriptor
+          = Data.ProtoLens.FieldDescriptor
+              "xs"
+              (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::
+                 Data.ProtoLens.FieldTypeDescriptor Payload'List)
+              (Data.ProtoLens.OptionalField
+                 (Data.ProtoLens.Field.field @"maybe'xs")) ::
+              Data.ProtoLens.FieldDescriptor Payload'List
+      in
+        Data.Map.fromList
+          [(Data.ProtoLens.Tag 1, x__field_descriptor),
+           (Data.ProtoLens.Tag 2, xs__field_descriptor)]
+  unknownFields
+    = Lens.Family2.Unchecked.lens
+        _Payload'List'_unknownFields
+        (\ x__ y__ -> x__ {_Payload'List'_unknownFields = y__})
+  defMessage
+    = Payload'List'_constructor
+        {_Payload'List'either = Prelude.Nothing,
+         _Payload'List'_unknownFields = []}
+  parseMessage
+    = let
+        loop ::
+          Payload'List -> Data.ProtoLens.Encoding.Bytes.Parser Payload'List
+        loop x
+          = do end <- Data.ProtoLens.Encoding.Bytes.atEnd
+               if end then
+                   do (let missing = []
+                       in
+                         if Prelude.null missing then
+                             Prelude.return ()
+                         else
+                             Prelude.fail
+                               ((Prelude.++)
+                                  "Missing required fields: "
+                                  (Prelude.show (missing :: [Prelude.String]))))
+                      Prelude.return
+                        (Lens.Family2.over
+                           Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)
+               else
+                   do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt
+                      case tag of
+                        10
+                          -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)
+                                       (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt
+                                           Data.ProtoLens.Encoding.Bytes.getBytes
+                                             (Prelude.fromIntegral len))
+                                       "x"
+                                loop (Lens.Family2.set (Data.ProtoLens.Field.field @"x") y x)
+                        18
+                          -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)
+                                       (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt
+                                           Data.ProtoLens.Encoding.Bytes.isolate
+                                             (Prelude.fromIntegral len) Data.ProtoLens.parseMessage)
+                                       "xs"
+                                loop (Lens.Family2.set (Data.ProtoLens.Field.field @"xs") y x)
+                        wire
+                          -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire
+                                        wire
+                                loop
+                                  (Lens.Family2.over
+                                     Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)
+      in
+        (Data.ProtoLens.Encoding.Bytes.<?>)
+          (do loop Data.ProtoLens.defMessage) "List"
+  buildMessage
+    = \ _x
+        -> (Data.Monoid.<>)
+             (case
+                  Lens.Family2.view (Data.ProtoLens.Field.field @"maybe'either") _x
+              of
+                Prelude.Nothing -> Data.Monoid.mempty
+                (Prelude.Just (Payload'List'X v))
+                  -> (Data.Monoid.<>)
+                       (Data.ProtoLens.Encoding.Bytes.putVarInt 10)
+                       ((\ bs
+                           -> (Data.Monoid.<>)
+                                (Data.ProtoLens.Encoding.Bytes.putVarInt
+                                   (Prelude.fromIntegral (Data.ByteString.length bs)))
+                                (Data.ProtoLens.Encoding.Bytes.putBytes bs))
+                          v)
+                (Prelude.Just (Payload'List'Xs v))
+                  -> (Data.Monoid.<>)
+                       (Data.ProtoLens.Encoding.Bytes.putVarInt 18)
+                       ((Prelude..)
+                          (\ bs
+                             -> (Data.Monoid.<>)
+                                  (Data.ProtoLens.Encoding.Bytes.putVarInt
+                                     (Prelude.fromIntegral (Data.ByteString.length bs)))
+                                  (Data.ProtoLens.Encoding.Bytes.putBytes bs))
+                          Data.ProtoLens.encodeMessage
+                          v))
+             (Data.ProtoLens.Encoding.Wire.buildFieldSet
+                (Lens.Family2.view Data.ProtoLens.unknownFields _x))
+instance Control.DeepSeq.NFData Payload'List where
+  rnf
+    = \ x__
+        -> Control.DeepSeq.deepseq
+             (_Payload'List'_unknownFields x__)
+             (Control.DeepSeq.deepseq (_Payload'List'either x__) ())
+instance Control.DeepSeq.NFData Payload'List'Either where
+  rnf (Payload'List'X x__) = Control.DeepSeq.rnf x__
+  rnf (Payload'List'Xs x__) = Control.DeepSeq.rnf x__
+_Payload'List'X ::
+  Data.ProtoLens.Prism.Prism' Payload'List'Either Data.ByteString.ByteString
+_Payload'List'X
+  = Data.ProtoLens.Prism.prism'
+      Payload'List'X
+      (\ p__
+         -> case p__ of
+              (Payload'List'X p__val) -> Prelude.Just p__val
+              _otherwise -> Prelude.Nothing)
+_Payload'List'Xs ::
+  Data.ProtoLens.Prism.Prism' Payload'List'Either Payload'List
+_Payload'List'Xs
+  = Data.ProtoLens.Prism.prism'
+      Payload'List'Xs
+      (\ p__
+         -> case p__ of
+              (Payload'List'Xs p__val) -> Prelude.Just p__val
+              _otherwise -> Prelude.Nothing)
+packedFileDescriptor :: Data.ByteString.ByteString
+packedFileDescriptor
+  = "\n\
+    \\SYNreserved_keyword.proto\DC2\SIReservedKeyword\"\156\STX\n\
+    \\aPayload\DC2\SYN\n\
+    \\ACKmodule\CAN\SOH \SOH(\fR\ACKmodule\DC21\n\
+    \\EOTdata\CAN\STX \ETX(\v2\GS.ReservedKeyword.Payload.ListR\EOTdata\DC2\DC2\n\
+    \\EOTtype\CAN\ETX \ETX(\fR\EOTtype\DC23\n\
+    \\ENQclass\CAN\EOT \SOH(\v2\GS.ReservedKeyword.Payload.ListR\ENQclass\DC2\SUB\n\
+    \\binstance\CAN\ENQ \SOH(\fR\binstance\DC2\SO\n\
+    \\STXif\CAN\ACK \SOH(\bR\STXif\SUBQ\n\
+    \\EOTList\DC2\SO\n\
+    \\SOHx\CAN\SOH \SOH(\fH\NULR\SOHx\DC2/\n\
+    \\STXxs\CAN\STX \SOH(\v2\GS.ReservedKeyword.Payload.ListH\NULR\STXxsB\b\n\
+    \\ACKeitherJ\144\ENQ\n\
+    \\ACK\DC2\EOT\NUL\NUL\DC1\SOH\n\
+    \\b\n\
+    \\SOH\f\DC2\ETX\NUL\NUL\DC2\n\
+    \\b\n\
+    \\SOH\STX\DC2\ETX\SOH\NUL\CAN\n\
+    \\n\
+    \\n\
+    \\STX\EOT\NUL\DC2\EOT\ETX\NUL\DC1\SOH\n\
+    \\n\
+    \\n\
+    \\ETX\EOT\NUL\SOH\DC2\ETX\ETX\b\SI\n\
+    \\v\n\
+    \\EOT\EOT\NUL\STX\NUL\DC2\ETX\EOT\STX\DC3\n\
+    \\r\n\
+    \\ENQ\EOT\NUL\STX\NUL\EOT\DC2\EOT\EOT\STX\ETX\DC1\n\
+    \\f\n\
+    \\ENQ\EOT\NUL\STX\NUL\ENQ\DC2\ETX\EOT\STX\a\n\
+    \\f\n\
+    \\ENQ\EOT\NUL\STX\NUL\SOH\DC2\ETX\EOT\b\SO\n\
+    \\f\n\
+    \\ENQ\EOT\NUL\STX\NUL\ETX\DC2\ETX\EOT\DC1\DC2\n\
+    \\v\n\
+    \\EOT\EOT\NUL\STX\SOH\DC2\ETX\ENQ\STX\EM\n\
+    \\f\n\
+    \\ENQ\EOT\NUL\STX\SOH\EOT\DC2\ETX\ENQ\STX\n\
+    \\n\
+    \\f\n\
+    \\ENQ\EOT\NUL\STX\SOH\ACK\DC2\ETX\ENQ\v\SI\n\
+    \\f\n\
+    \\ENQ\EOT\NUL\STX\SOH\SOH\DC2\ETX\ENQ\DLE\DC4\n\
+    \\f\n\
+    \\ENQ\EOT\NUL\STX\SOH\ETX\DC2\ETX\ENQ\ETB\CAN\n\
+    \\v\n\
+    \\EOT\EOT\NUL\STX\STX\DC2\ETX\ACK\STX\SUB\n\
+    \\f\n\
+    \\ENQ\EOT\NUL\STX\STX\EOT\DC2\ETX\ACK\STX\n\
+    \\n\
+    \\f\n\
+    \\ENQ\EOT\NUL\STX\STX\ENQ\DC2\ETX\ACK\v\DLE\n\
+    \\f\n\
+    \\ENQ\EOT\NUL\STX\STX\SOH\DC2\ETX\ACK\DC1\NAK\n\
+    \\f\n\
+    \\ENQ\EOT\NUL\STX\STX\ETX\DC2\ETX\ACK\CAN\EM\n\
+    \\v\n\
+    \\EOT\EOT\NUL\STX\ETX\DC2\ETX\a\STX\DC1\n\
+    \\r\n\
+    \\ENQ\EOT\NUL\STX\ETX\EOT\DC2\EOT\a\STX\ACK\SUB\n\
+    \\f\n\
+    \\ENQ\EOT\NUL\STX\ETX\ACK\DC2\ETX\a\STX\ACK\n\
+    \\f\n\
+    \\ENQ\EOT\NUL\STX\ETX\SOH\DC2\ETX\a\a\f\n\
+    \\f\n\
+    \\ENQ\EOT\NUL\STX\ETX\ETX\DC2\ETX\a\SI\DLE\n\
+    \\v\n\
+    \\EOT\EOT\NUL\STX\EOT\DC2\ETX\b\STX\NAK\n\
+    \\r\n\
+    \\ENQ\EOT\NUL\STX\EOT\EOT\DC2\EOT\b\STX\a\DC1\n\
+    \\f\n\
+    \\ENQ\EOT\NUL\STX\EOT\ENQ\DC2\ETX\b\STX\a\n\
+    \\f\n\
+    \\ENQ\EOT\NUL\STX\EOT\SOH\DC2\ETX\b\b\DLE\n\
+    \\f\n\
+    \\ENQ\EOT\NUL\STX\EOT\ETX\DC2\ETX\b\DC3\DC4\n\
+    \\v\n\
+    \\EOT\EOT\NUL\STX\ENQ\DC2\ETX\t\STX\SO\n\
+    \\r\n\
+    \\ENQ\EOT\NUL\STX\ENQ\EOT\DC2\EOT\t\STX\b\NAK\n\
+    \\f\n\
+    \\ENQ\EOT\NUL\STX\ENQ\ENQ\DC2\ETX\t\STX\ACK\n\
+    \\f\n\
+    \\ENQ\EOT\NUL\STX\ENQ\SOH\DC2\ETX\t\a\t\n\
+    \\f\n\
+    \\ENQ\EOT\NUL\STX\ENQ\ETX\DC2\ETX\t\f\r\n\
+    \\f\n\
+    \\EOT\EOT\NUL\ETX\NUL\DC2\EOT\v\STX\DLE\ETX\n\
+    \\f\n\
+    \\ENQ\EOT\NUL\ETX\NUL\SOH\DC2\ETX\v\n\
+    \\SO\n\
+    \\SO\n\
+    \\ACK\EOT\NUL\ETX\NUL\b\NUL\DC2\EOT\f\EOT\SI\ENQ\n\
+    \\SO\n\
+    \\a\EOT\NUL\ETX\NUL\b\NUL\SOH\DC2\ETX\f\n\
+    \\DLE\n\
+    \\r\n\
+    \\ACK\EOT\NUL\ETX\NUL\STX\NUL\DC2\ETX\r\ACK\DC2\n\
+    \\SO\n\
+    \\a\EOT\NUL\ETX\NUL\STX\NUL\ENQ\DC2\ETX\r\ACK\v\n\
+    \\SO\n\
+    \\a\EOT\NUL\ETX\NUL\STX\NUL\SOH\DC2\ETX\r\f\r\n\
+    \\SO\n\
+    \\a\EOT\NUL\ETX\NUL\STX\NUL\ETX\DC2\ETX\r\DLE\DC1\n\
+    \\r\n\
+    \\ACK\EOT\NUL\ETX\NUL\STX\SOH\DC2\ETX\SO\ACK\DC2\n\
+    \\SO\n\
+    \\a\EOT\NUL\ETX\NUL\STX\SOH\ACK\DC2\ETX\SO\ACK\n\
+    \\n\
+    \\SO\n\
+    \\a\EOT\NUL\ETX\NUL\STX\SOH\SOH\DC2\ETX\SO\v\r\n\
+    \\SO\n\
+    \\a\EOT\NUL\ETX\NUL\STX\SOH\ETX\DC2\ETX\SO\DLE\DC1b\ACKproto3"
diff --git a/test/Proto/ReservedKeyword_Fields.hs b/test/Proto/ReservedKeyword_Fields.hs
new file mode 100644
--- /dev/null
+++ b/test/Proto/ReservedKeyword_Fields.hs
@@ -0,0 +1,105 @@
+{- This file was auto-generated from reserved_keyword.proto by the proto-lens-protoc program. -}
+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies, UndecidableInstances, GeneralizedNewtypeDeriving, MultiParamTypeClasses, FlexibleContexts, FlexibleInstances, PatternSynonyms, MagicHash, NoImplicitPrelude, DataKinds, BangPatterns, TypeApplications, OverloadedStrings, DerivingStrategies#-}
+{-# OPTIONS_GHC -Wno-unused-imports#-}
+{-# OPTIONS_GHC -Wno-duplicate-exports#-}
+{-# OPTIONS_GHC -Wno-dodgy-exports#-}
+module Proto.ReservedKeyword_Fields where
+import qualified Data.ProtoLens.Runtime.Prelude as Prelude
+import qualified Data.ProtoLens.Runtime.Data.Int as Data.Int
+import qualified Data.ProtoLens.Runtime.Data.Monoid as Data.Monoid
+import qualified Data.ProtoLens.Runtime.Data.Word as Data.Word
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens as Data.ProtoLens
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Bytes as Data.ProtoLens.Encoding.Bytes
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Growing as Data.ProtoLens.Encoding.Growing
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Parser.Unsafe as Data.ProtoLens.Encoding.Parser.Unsafe
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Wire as Data.ProtoLens.Encoding.Wire
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Field as Data.ProtoLens.Field
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Message.Enum as Data.ProtoLens.Message.Enum
+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Service.Types as Data.ProtoLens.Service.Types
+import qualified Data.ProtoLens.Runtime.Lens.Family2 as Lens.Family2
+import qualified Data.ProtoLens.Runtime.Lens.Family2.Unchecked as Lens.Family2.Unchecked
+import qualified Data.ProtoLens.Runtime.Data.Text as Data.Text
+import qualified Data.ProtoLens.Runtime.Data.Map as Data.Map
+import qualified Data.ProtoLens.Runtime.Data.ByteString as Data.ByteString
+import qualified Data.ProtoLens.Runtime.Data.ByteString.Char8 as Data.ByteString.Char8
+import qualified Data.ProtoLens.Runtime.Data.Text.Encoding as Data.Text.Encoding
+import qualified Data.ProtoLens.Runtime.Data.Vector as Data.Vector
+import qualified Data.ProtoLens.Runtime.Data.Vector.Generic as Data.Vector.Generic
+import qualified Data.ProtoLens.Runtime.Data.Vector.Unboxed as Data.Vector.Unboxed
+import qualified Data.ProtoLens.Runtime.Text.Read as Text.Read
+class' ::
+  forall f s a.
+  (Prelude.Functor f, Data.ProtoLens.Field.HasField s "class'" a) =>
+  Lens.Family2.LensLike' f s a
+class' = Data.ProtoLens.Field.field @"class'"
+data' ::
+  forall f s a.
+  (Prelude.Functor f, Data.ProtoLens.Field.HasField s "data'" a) =>
+  Lens.Family2.LensLike' f s a
+data' = Data.ProtoLens.Field.field @"data'"
+if' ::
+  forall f s a.
+  (Prelude.Functor f, Data.ProtoLens.Field.HasField s "if'" a) =>
+  Lens.Family2.LensLike' f s a
+if' = Data.ProtoLens.Field.field @"if'"
+instance' ::
+  forall f s a.
+  (Prelude.Functor f,
+   Data.ProtoLens.Field.HasField s "instance'" a) =>
+  Lens.Family2.LensLike' f s a
+instance' = Data.ProtoLens.Field.field @"instance'"
+maybe'class' ::
+  forall f s a.
+  (Prelude.Functor f,
+   Data.ProtoLens.Field.HasField s "maybe'class'" a) =>
+  Lens.Family2.LensLike' f s a
+maybe'class' = Data.ProtoLens.Field.field @"maybe'class'"
+maybe'either ::
+  forall f s a.
+  (Prelude.Functor f,
+   Data.ProtoLens.Field.HasField s "maybe'either" a) =>
+  Lens.Family2.LensLike' f s a
+maybe'either = Data.ProtoLens.Field.field @"maybe'either"
+maybe'x ::
+  forall f s a.
+  (Prelude.Functor f, Data.ProtoLens.Field.HasField s "maybe'x" a) =>
+  Lens.Family2.LensLike' f s a
+maybe'x = Data.ProtoLens.Field.field @"maybe'x"
+maybe'xs ::
+  forall f s a.
+  (Prelude.Functor f,
+   Data.ProtoLens.Field.HasField s "maybe'xs" a) =>
+  Lens.Family2.LensLike' f s a
+maybe'xs = Data.ProtoLens.Field.field @"maybe'xs"
+module' ::
+  forall f s a.
+  (Prelude.Functor f, Data.ProtoLens.Field.HasField s "module'" a) =>
+  Lens.Family2.LensLike' f s a
+module' = Data.ProtoLens.Field.field @"module'"
+type' ::
+  forall f s a.
+  (Prelude.Functor f, Data.ProtoLens.Field.HasField s "type'" a) =>
+  Lens.Family2.LensLike' f s a
+type' = Data.ProtoLens.Field.field @"type'"
+vec'data' ::
+  forall f s a.
+  (Prelude.Functor f,
+   Data.ProtoLens.Field.HasField s "vec'data'" a) =>
+  Lens.Family2.LensLike' f s a
+vec'data' = Data.ProtoLens.Field.field @"vec'data'"
+vec'type' ::
+  forall f s a.
+  (Prelude.Functor f,
+   Data.ProtoLens.Field.HasField s "vec'type'" a) =>
+  Lens.Family2.LensLike' f s a
+vec'type' = Data.ProtoLens.Field.field @"vec'type'"
+x ::
+  forall f s a.
+  (Prelude.Functor f, Data.ProtoLens.Field.HasField s "x" a) =>
+  Lens.Family2.LensLike' f s a
+x = Data.ProtoLens.Field.field @"x"
+xs ::
+  forall f s a.
+  (Prelude.Functor f, Data.ProtoLens.Field.HasField s "xs" a) =>
+  Lens.Family2.LensLike' f s a
+xs = Data.ProtoLens.Field.field @"xs"
diff --git a/test/Proto/SignableOrphan.hs b/test/Proto/SignableOrphan.hs
--- a/test/Proto/SignableOrphan.hs
+++ b/test/Proto/SignableOrphan.hs
@@ -1,242 +1,527 @@
 {- This file was auto-generated by the signable-haskell-protoc program. -}
 {-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 module Proto.SignableOrphan (
     ) where
-import Universum
-import Data.Signable
-import Proto.GoogleProtobuf
-import Proto.GoogleProtobuf_Fields
-import Proto.Basic
-import Proto.Basic_Fields
-import Proto.Coins
-import Proto.Coins_Fields
-import Proto.EmbeddedSchema
-import Proto.EmbeddedSchema_Fields
-import Proto.Number
-import Proto.Number_Fields
-import Proto.Text
-import Proto.Text_Fields
-instance Signable Proto.GoogleProtobuf.DoubleValue where
-  toBinary x
-    = mconcat
-        [toBinary (1 :: Int32)
-           <> toBinary (view Proto.GoogleProtobuf_Fields.value x)]
-instance Signable Proto.GoogleProtobuf.FloatValue where
-  toBinary x
-    = mconcat
-        [toBinary (1 :: Int32)
-           <> toBinary (view Proto.GoogleProtobuf_Fields.value x)]
-instance Signable Proto.GoogleProtobuf.Int64Value where
-  toBinary x
-    = mconcat
-        [toBinary (1 :: Int32)
-           <> toBinary (view Proto.GoogleProtobuf_Fields.value x)]
-instance Signable Proto.GoogleProtobuf.UInt64Value where
-  toBinary x
-    = mconcat
-        [toBinary (1 :: Int32)
-           <> toBinary (view Proto.GoogleProtobuf_Fields.value x)]
-instance Signable Proto.GoogleProtobuf.Int32Value where
-  toBinary x
-    = mconcat
-        [toBinary (1 :: Int32)
-           <> toBinary (view Proto.GoogleProtobuf_Fields.value x)]
-instance Signable Proto.GoogleProtobuf.UInt32Value where
-  toBinary x
-    = mconcat
-        [toBinary (1 :: Int32)
-           <> toBinary (view Proto.GoogleProtobuf_Fields.value x)]
-instance Signable Proto.GoogleProtobuf.BoolValue where
-  toBinary x
-    = mconcat
-        [toBinary (1 :: Int32)
-           <> toBinary (view Proto.GoogleProtobuf_Fields.value x)]
-instance Signable Proto.GoogleProtobuf.StringValue where
-  toBinary x
-    = mconcat
-        [toBinary (1 :: Int32)
-           <> toBinary (view Proto.GoogleProtobuf_Fields.value x)]
-instance Signable Proto.GoogleProtobuf.BytesValue where
-  toBinary x
-    = mconcat
-        [toBinary (1 :: Int32)
-           <> toBinary (view Proto.GoogleProtobuf_Fields.value x)]
-instance Signable Proto.GoogleProtobuf.Timestamp where
-  toBinary x
-    = mconcat
-        [toBinary (1 :: Int32)
-           <> toBinary (view Proto.GoogleProtobuf_Fields.seconds x),
-         toBinary (2 :: Int32)
-           <> toBinary (view Proto.GoogleProtobuf_Fields.nanos x)]
-instance Signable Proto.Basic.CurrencyCode where
-  toBinary x
-    = case safeFromIntegral (fromEnum x) :: (Maybe Int32) of
-        (Just v) -> toBinary v
-        Nothing -> error "ENUM_OVERFLOW"
-instance Signable Proto.Basic.RequestType where
-  toBinary x
-    = case safeFromIntegral (fromEnum x) :: (Maybe Int32) of
-        (Just v) -> toBinary v
-        Nothing -> error "ENUM_OVERFLOW"
-instance Signable Proto.Basic.Payload where
-  toBinary x
-    = mconcat
-        [toBinary (1 :: Int32)
-           <> toBinary (view Proto.Basic_Fields.userIdFrom x),
-         case view Proto.Basic_Fields.maybe'amount x of
-           (Just v) -> toBinary (2 :: Int32) <> toBinary v
-           Nothing -> toBinary (2 :: Int32),
-         toBinary (3 :: Int32)
-           <> toBinary (view Proto.Basic_Fields.requestType x),
-         toBinary (4 :: Int32)
-           <> toBinary (view Proto.Basic_Fields.addFee x),
-         toBinary (5 :: Int32)
-           <> toBinary (view Proto.Basic_Fields.comments x),
-         case view Proto.Basic_Fields.maybe'userIdTo x of
-           (Just v) -> toBinary (6 :: Int32) <> toBinary v
-           Nothing -> toBinary (6 :: Int32),
-         case view Proto.Basic_Fields.maybe'merchantIdTo x of
-           (Just v) -> toBinary (7 :: Int32) <> toBinary v
-           Nothing -> toBinary (7 :: Int32),
-         case view Proto.Basic_Fields.maybe'invoiceTo x of
-           (Just v) -> toBinary (8 :: Int32) <> toBinary v
-           Nothing -> toBinary (8 :: Int32)]
-instance Signable Proto.Basic.UMoney where
-  toBinary x
-    = mconcat
-        [toBinary (1 :: Int32)
-           <> toBinary (view Proto.Basic_Fields.amount x),
-         case view Proto.Basic_Fields.maybe'currencyCode x of
-           (Just v) -> toBinary (2 :: Int32) <> toBinary v
-           Nothing -> toBinary (2 :: Int32)]
-instance Signable Proto.Basic.CurrencyCodeValue where
-  toBinary x
-    = mconcat
-        [toBinary (1 :: Int32)
-           <> toBinary (view Proto.Basic_Fields.value x)]
-instance Signable Proto.Coins.InvoiceType where
-  toBinary x
-    = case safeFromIntegral (fromEnum x) :: (Maybe Int32) of
-        (Just v) -> toBinary v
-        Nothing -> error "ENUM_OVERFLOW"
-instance Signable Proto.Coins.CurrencyCode where
-  toBinary x
-    = case safeFromIntegral (fromEnum x) :: (Maybe Int32) of
-        (Just v) -> toBinary v
-        Nothing -> error "ENUM_OVERFLOW"
-instance Signable Proto.Coins.Request where
-  toBinary x
-    = mconcat
-        [case view Proto.Coins_Fields.maybe'ledgerTransferRequest x of
-           (Just v) -> toBinary (1 :: Int32) <> toBinary v
-           Nothing -> toBinary (1 :: Int32),
-         toBinary (2 :: Int32)
-           <> toBinary (view Proto.Coins_Fields.ledgerSignature x)]
-instance Signable Proto.Coins.Request'LedgerTransferRequest where
-  toBinary x
-    = mconcat
-        [case view Proto.Coins_Fields.maybe'userTransferRequest x of
-           (Just v) -> toBinary (1 :: Int32) <> toBinary v
-           Nothing -> toBinary (1 :: Int32),
-         toBinary (2 :: Int32)
-           <> toBinary (view Proto.Coins_Fields.userSignature x),
-         case view Proto.Coins_Fields.maybe'invoice x of
-           (Just v) -> toBinary (3 :: Int32) <> toBinary v
-           Nothing -> toBinary (3 :: Int32)]
-instance Signable Proto.Coins.Request'UserTransferRequest where
-  toBinary x
-    = mconcat
-        [case view Proto.Coins_Fields.maybe'userRequest x of
-           (Just v) -> toBinary (1 :: Int32) <> toBinary v
-           Nothing -> toBinary (1 :: Int32),
-         case view Proto.Coins_Fields.maybe'merchantIdTo x of
-           (Just v) -> toBinary (2 :: Int32) <> toBinary v
-           Nothing -> toBinary (2 :: Int32),
-         case view Proto.Coins_Fields.maybe'invoice x of
-           (Just v) -> toBinary (3 :: Int32) <> toBinary v
-           Nothing -> toBinary (3 :: Int32)]
-instance Signable Proto.Coins.LightningInvoice where
-  toBinary x
-    = mconcat
-        [toBinary (1 :: Int32)
-           <> toBinary (view Proto.Coins_Fields.rHash x),
-         toBinary (2 :: Int32)
-           <> toBinary (view Proto.Coins_Fields.paymentRequest x),
-         toBinary (3 :: Int32)
-           <> toBinary (view Proto.Coins_Fields.invoiceType x)]
-instance Signable Proto.Coins.UserRequest where
-  toBinary x
-    = mconcat
-        [toBinary (1 :: Int32)
-           <> toBinary (view Proto.Coins_Fields.pubKeyUidFrom x),
-         case view Proto.Coins_Fields.maybe'amount x of
-           (Just v) -> toBinary (2 :: Int32) <> toBinary v
-           Nothing -> toBinary (2 :: Int32),
-         toBinary (3 :: Int32)
-           <> toBinary (view Proto.Coins_Fields.requestId x)]
-instance Signable Proto.Coins.UMoney where
-  toBinary x
-    = mconcat
-        [case view Proto.Coins_Fields.maybe'amount x of
-           (Just v) -> toBinary (1 :: Int32) <> toBinary v
-           Nothing -> toBinary (1 :: Int32),
-         case view Proto.Coins_Fields.maybe'currencyCode x of
-           (Just v) -> toBinary (2 :: Int32) <> toBinary v
-           Nothing -> toBinary (2 :: Int32)]
-instance Signable Proto.Coins.UDecimal where
-  toBinary x
-    = mconcat
-        [toBinary (1 :: Int32)
-           <> toBinary (view Proto.Coins_Fields.coef x),
-         toBinary (2 :: Int32) <> toBinary (view Proto.Coins_Fields.exp x)]
-instance Signable Proto.Coins.CurrencyCodeValue where
-  toBinary x
-    = mconcat
-        [toBinary (1 :: Int32)
-           <> toBinary (view Proto.Coins_Fields.value x)]
-instance Signable Proto.EmbeddedSchema.Enum where
-  toBinary x
-    = case safeFromIntegral (fromEnum x) :: (Maybe Int32) of
-        (Just v) -> toBinary v
-        Nothing -> error "ENUM_OVERFLOW"
-instance Signable Proto.EmbeddedSchema.Embedded where
-  toBinary x
-    = mconcat
-        [case view Proto.EmbeddedSchema_Fields.maybe'msgField x of
-           (Just v) -> toBinary (1 :: Int32) <> toBinary v
-           Nothing -> toBinary (1 :: Int32)]
-instance Signable Proto.EmbeddedSchema.Embedded'Msg where
-  toBinary x
-    = mconcat
-        [toBinary (1 :: Int32)
-           <> toBinary (view Proto.EmbeddedSchema_Fields.enumField x)]
-instance Signable Proto.EmbeddedSchema.Embedded'Msg'Enum where
-  toBinary x
-    = case safeFromIntegral (fromEnum x) :: (Maybe Int32) of
-        (Just v) -> toBinary v
-        Nothing -> error "ENUM_OVERFLOW"
-instance Signable Proto.EmbeddedSchema.Msg where
-  toBinary x
-    = mconcat
-        [toBinary (1 :: Int32)
-           <> toBinary (view Proto.EmbeddedSchema_Fields.enumField x)]
-instance Signable Proto.EmbeddedSchema.Msg'Enum where
-  toBinary x
-    = case safeFromIntegral (fromEnum x) :: (Maybe Int32) of
-        (Just v) -> toBinary v
-        Nothing -> error "ENUM_OVERFLOW"
-instance Signable Proto.Number.Payload where
-  toBinary x
-    = mconcat
-        [toBinary (1 :: Int32)
-           <> toBinary (view Proto.Number_Fields.one x),
-         toBinary (2 :: Int32) <> toBinary (view Proto.Number_Fields.two x),
-         toBinary (3 :: Int32)
-           <> toBinary (view Proto.Number_Fields.three x),
-         toBinary (4 :: Int32)
-           <> toBinary (view Proto.Number_Fields.four x)]
-instance Signable Proto.Text.Payload where
-  toBinary x
-    = mconcat
-        [toBinary (1 :: Int32) <> toBinary (view Proto.Text_Fields.text x)]
+import qualified Universum
+import qualified Data.Signable
+import qualified GHC.List
+import qualified Proto.GoogleProtobuf
+import qualified Proto.GoogleProtobuf_Fields
+import qualified Proto.Basic
+import qualified Proto.Basic_Fields
+import qualified Proto.Coins
+import qualified Proto.Coins_Fields
+import qualified Proto.EmbeddedSchema
+import qualified Proto.EmbeddedSchema_Fields
+import qualified Proto.Number
+import qualified Proto.Number_Fields
+import qualified Proto.RepeatedMsg
+import qualified Proto.RepeatedMsg_Fields
+import qualified Proto.ReservedKeyword
+import qualified Proto.ReservedKeyword_Fields
+import qualified Proto.Text
+import qualified Proto.Text_Fields
+instance Data.Signable.Signable Proto.GoogleProtobuf.DoubleValue where
+  toBinary
+    = Universum.mconcat
+        Universum..
+          ((Universum.<&>)
+             [(Universum.<>) (Data.Signable.toBinary (1 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.GoogleProtobuf_Fields.value)]
+             Universum.. (Universum.&))
+instance Data.Signable.Signable Proto.GoogleProtobuf.FloatValue where
+  toBinary
+    = Universum.mconcat
+        Universum..
+          ((Universum.<&>)
+             [(Universum.<>) (Data.Signable.toBinary (1 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.GoogleProtobuf_Fields.value)]
+             Universum.. (Universum.&))
+instance Data.Signable.Signable Proto.GoogleProtobuf.Int64Value where
+  toBinary
+    = Universum.mconcat
+        Universum..
+          ((Universum.<&>)
+             [(Universum.<>) (Data.Signable.toBinary (1 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.GoogleProtobuf_Fields.value)]
+             Universum.. (Universum.&))
+instance Data.Signable.Signable Proto.GoogleProtobuf.UInt64Value where
+  toBinary
+    = Universum.mconcat
+        Universum..
+          ((Universum.<&>)
+             [(Universum.<>) (Data.Signable.toBinary (1 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.GoogleProtobuf_Fields.value)]
+             Universum.. (Universum.&))
+instance Data.Signable.Signable Proto.GoogleProtobuf.Int32Value where
+  toBinary
+    = Universum.mconcat
+        Universum..
+          ((Universum.<&>)
+             [(Universum.<>) (Data.Signable.toBinary (1 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.GoogleProtobuf_Fields.value)]
+             Universum.. (Universum.&))
+instance Data.Signable.Signable Proto.GoogleProtobuf.UInt32Value where
+  toBinary
+    = Universum.mconcat
+        Universum..
+          ((Universum.<&>)
+             [(Universum.<>) (Data.Signable.toBinary (1 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.GoogleProtobuf_Fields.value)]
+             Universum.. (Universum.&))
+instance Data.Signable.Signable Proto.GoogleProtobuf.BoolValue where
+  toBinary
+    = Universum.mconcat
+        Universum..
+          ((Universum.<&>)
+             [(Universum.<>) (Data.Signable.toBinary (1 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.GoogleProtobuf_Fields.value)]
+             Universum.. (Universum.&))
+instance Data.Signable.Signable Proto.GoogleProtobuf.StringValue where
+  toBinary
+    = Universum.mconcat
+        Universum..
+          ((Universum.<&>)
+             [(Universum.<>) (Data.Signable.toBinary (1 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.GoogleProtobuf_Fields.value)]
+             Universum.. (Universum.&))
+instance Data.Signable.Signable Proto.GoogleProtobuf.BytesValue where
+  toBinary
+    = Universum.mconcat
+        Universum..
+          ((Universum.<&>)
+             [(Universum.<>) (Data.Signable.toBinary (1 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.GoogleProtobuf_Fields.value)]
+             Universum.. (Universum.&))
+instance Data.Signable.Signable Proto.GoogleProtobuf.Timestamp where
+  toBinary
+    = Universum.mconcat
+        Universum..
+          ((Universum.<&>)
+             [(Universum.<>) (Data.Signable.toBinary (1 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.GoogleProtobuf_Fields.seconds),
+              (Universum.<>) (Data.Signable.toBinary (2 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.GoogleProtobuf_Fields.nanos)]
+             Universum.. (Universum.&))
+instance Data.Signable.Signable Proto.Basic.CurrencyCode where
+  toBinary
+    = Universum.maybe
+        (Universum.error "ENUM_OVERFLOW") Data.Signable.toBinary
+        Universum..
+          ((Data.Signable.safeFromIntegral ::
+              Universum.Int -> Universum.Maybe Universum.Int32)
+             Universum.. Universum.fromEnum)
+instance Data.Signable.Signable Proto.Basic.RequestType where
+  toBinary
+    = Universum.maybe
+        (Universum.error "ENUM_OVERFLOW") Data.Signable.toBinary
+        Universum..
+          ((Data.Signable.safeFromIntegral ::
+              Universum.Int -> Universum.Maybe Universum.Int32)
+             Universum.. Universum.fromEnum)
+instance Data.Signable.Signable Proto.Basic.Payload where
+  toBinary
+    = Universum.mconcat
+        Universum..
+          ((Universum.<&>)
+             [(Universum.<>) (Data.Signable.toBinary (1 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.Basic_Fields.userIdFrom),
+              Universum.maybe
+                Universum.mempty
+                ((Universum.<>) (Data.Signable.toBinary (2 :: Universum.Int32))
+                   Universum.. Data.Signable.toBinary)
+                Universum.. Universum.view Proto.Basic_Fields.maybe'amount,
+              (Universum.<>) (Data.Signable.toBinary (3 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.Basic_Fields.requestType),
+              (Universum.<>) (Data.Signable.toBinary (4 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.Basic_Fields.addFee),
+              Data.Signable.ifThenElse
+                GHC.List.null
+                (Universum.const Universum.mempty)
+                ((Universum.<>) (Data.Signable.toBinary (5 :: Universum.Int32))
+                   Universum.. Data.Signable.toBinary)
+                Universum.. Universum.view Proto.Basic_Fields.comments,
+              Universum.maybe
+                Universum.mempty
+                ((Universum.<>) (Data.Signable.toBinary (6 :: Universum.Int32))
+                   Universum.. Data.Signable.toBinary)
+                Universum.. Universum.view Proto.Basic_Fields.maybe'userIdTo,
+              Universum.maybe
+                Universum.mempty
+                ((Universum.<>) (Data.Signable.toBinary (7 :: Universum.Int32))
+                   Universum.. Data.Signable.toBinary)
+                Universum.. Universum.view Proto.Basic_Fields.maybe'merchantIdTo,
+              Universum.maybe
+                Universum.mempty
+                ((Universum.<>) (Data.Signable.toBinary (8 :: Universum.Int32))
+                   Universum.. Data.Signable.toBinary)
+                Universum.. Universum.view Proto.Basic_Fields.maybe'invoiceTo]
+             Universum.. (Universum.&))
+instance Data.Signable.Signable Proto.Basic.UMoney where
+  toBinary
+    = Universum.mconcat
+        Universum..
+          ((Universum.<&>)
+             [(Universum.<>) (Data.Signable.toBinary (1 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.Basic_Fields.amount),
+              Universum.maybe
+                Universum.mempty
+                ((Universum.<>) (Data.Signable.toBinary (2 :: Universum.Int32))
+                   Universum.. Data.Signable.toBinary)
+                Universum.. Universum.view Proto.Basic_Fields.maybe'currencyCode]
+             Universum.. (Universum.&))
+instance Data.Signable.Signable Proto.Basic.CurrencyCodeValue where
+  toBinary
+    = Universum.mconcat
+        Universum..
+          ((Universum.<&>)
+             [(Universum.<>) (Data.Signable.toBinary (1 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.Basic_Fields.value)]
+             Universum.. (Universum.&))
+instance Data.Signable.Signable Proto.Coins.InvoiceType where
+  toBinary
+    = Universum.maybe
+        (Universum.error "ENUM_OVERFLOW") Data.Signable.toBinary
+        Universum..
+          ((Data.Signable.safeFromIntegral ::
+              Universum.Int -> Universum.Maybe Universum.Int32)
+             Universum.. Universum.fromEnum)
+instance Data.Signable.Signable Proto.Coins.CurrencyCode where
+  toBinary
+    = Universum.maybe
+        (Universum.error "ENUM_OVERFLOW") Data.Signable.toBinary
+        Universum..
+          ((Data.Signable.safeFromIntegral ::
+              Universum.Int -> Universum.Maybe Universum.Int32)
+             Universum.. Universum.fromEnum)
+instance Data.Signable.Signable Proto.Coins.Request where
+  toBinary
+    = Universum.mconcat
+        Universum..
+          ((Universum.<&>)
+             [Universum.maybe
+                Universum.mempty
+                ((Universum.<>) (Data.Signable.toBinary (1 :: Universum.Int32))
+                   Universum.. Data.Signable.toBinary)
+                Universum..
+                  Universum.view Proto.Coins_Fields.maybe'ledgerTransferRequest,
+              (Universum.<>) (Data.Signable.toBinary (2 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.Coins_Fields.ledgerSignature)]
+             Universum.. (Universum.&))
+instance Data.Signable.Signable Proto.Coins.Request'LedgerTransferRequest where
+  toBinary
+    = Universum.mconcat
+        Universum..
+          ((Universum.<&>)
+             [Universum.maybe
+                Universum.mempty
+                ((Universum.<>) (Data.Signable.toBinary (1 :: Universum.Int32))
+                   Universum.. Data.Signable.toBinary)
+                Universum..
+                  Universum.view Proto.Coins_Fields.maybe'userTransferRequest,
+              (Universum.<>) (Data.Signable.toBinary (2 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.Coins_Fields.userSignature),
+              Universum.maybe
+                Universum.mempty
+                ((Universum.<>) (Data.Signable.toBinary (3 :: Universum.Int32))
+                   Universum.. Data.Signable.toBinary)
+                Universum.. Universum.view Proto.Coins_Fields.maybe'invoice]
+             Universum.. (Universum.&))
+instance Data.Signable.Signable Proto.Coins.Request'UserTransferRequest where
+  toBinary
+    = Universum.mconcat
+        Universum..
+          ((Universum.<&>)
+             [Universum.maybe
+                Universum.mempty
+                ((Universum.<>) (Data.Signable.toBinary (1 :: Universum.Int32))
+                   Universum.. Data.Signable.toBinary)
+                Universum.. Universum.view Proto.Coins_Fields.maybe'userRequest,
+              Universum.maybe
+                Universum.mempty
+                ((Universum.<>) (Data.Signable.toBinary (2 :: Universum.Int32))
+                   Universum.. Data.Signable.toBinary)
+                Universum.. Universum.view Proto.Coins_Fields.maybe'merchantIdTo,
+              Universum.maybe
+                Universum.mempty
+                ((Universum.<>) (Data.Signable.toBinary (3 :: Universum.Int32))
+                   Universum.. Data.Signable.toBinary)
+                Universum.. Universum.view Proto.Coins_Fields.maybe'invoice]
+             Universum.. (Universum.&))
+instance Data.Signable.Signable Proto.Coins.LightningInvoice where
+  toBinary
+    = Universum.mconcat
+        Universum..
+          ((Universum.<&>)
+             [(Universum.<>) (Data.Signable.toBinary (1 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.Coins_Fields.rHash),
+              (Universum.<>) (Data.Signable.toBinary (2 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.Coins_Fields.paymentRequest),
+              (Universum.<>) (Data.Signable.toBinary (3 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.Coins_Fields.invoiceType)]
+             Universum.. (Universum.&))
+instance Data.Signable.Signable Proto.Coins.UserRequest where
+  toBinary
+    = Universum.mconcat
+        Universum..
+          ((Universum.<&>)
+             [(Universum.<>) (Data.Signable.toBinary (1 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.Coins_Fields.pubKeyUidFrom),
+              Universum.maybe
+                Universum.mempty
+                ((Universum.<>) (Data.Signable.toBinary (2 :: Universum.Int32))
+                   Universum.. Data.Signable.toBinary)
+                Universum.. Universum.view Proto.Coins_Fields.maybe'amount,
+              (Universum.<>) (Data.Signable.toBinary (3 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.Coins_Fields.requestId)]
+             Universum.. (Universum.&))
+instance Data.Signable.Signable Proto.Coins.UMoney where
+  toBinary
+    = Universum.mconcat
+        Universum..
+          ((Universum.<&>)
+             [Universum.maybe
+                Universum.mempty
+                ((Universum.<>) (Data.Signable.toBinary (1 :: Universum.Int32))
+                   Universum.. Data.Signable.toBinary)
+                Universum.. Universum.view Proto.Coins_Fields.maybe'amount,
+              Universum.maybe
+                Universum.mempty
+                ((Universum.<>) (Data.Signable.toBinary (2 :: Universum.Int32))
+                   Universum.. Data.Signable.toBinary)
+                Universum.. Universum.view Proto.Coins_Fields.maybe'currencyCode]
+             Universum.. (Universum.&))
+instance Data.Signable.Signable Proto.Coins.UDecimal where
+  toBinary
+    = Universum.mconcat
+        Universum..
+          ((Universum.<&>)
+             [(Universum.<>) (Data.Signable.toBinary (1 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.Coins_Fields.coef),
+              (Universum.<>) (Data.Signable.toBinary (2 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.Coins_Fields.exp)]
+             Universum.. (Universum.&))
+instance Data.Signable.Signable Proto.Coins.CurrencyCodeValue where
+  toBinary
+    = Universum.mconcat
+        Universum..
+          ((Universum.<&>)
+             [(Universum.<>) (Data.Signable.toBinary (1 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.Coins_Fields.value)]
+             Universum.. (Universum.&))
+instance Data.Signable.Signable Proto.EmbeddedSchema.Enum where
+  toBinary
+    = Universum.maybe
+        (Universum.error "ENUM_OVERFLOW") Data.Signable.toBinary
+        Universum..
+          ((Data.Signable.safeFromIntegral ::
+              Universum.Int -> Universum.Maybe Universum.Int32)
+             Universum.. Universum.fromEnum)
+instance Data.Signable.Signable Proto.EmbeddedSchema.Embedded where
+  toBinary
+    = Universum.mconcat
+        Universum..
+          ((Universum.<&>)
+             [Universum.maybe
+                Universum.mempty
+                ((Universum.<>) (Data.Signable.toBinary (1 :: Universum.Int32))
+                   Universum.. Data.Signable.toBinary)
+                Universum..
+                  Universum.view Proto.EmbeddedSchema_Fields.maybe'msgField]
+             Universum.. (Universum.&))
+instance Data.Signable.Signable Proto.EmbeddedSchema.Embedded'Msg where
+  toBinary
+    = Universum.mconcat
+        Universum..
+          ((Universum.<&>)
+             [(Universum.<>) (Data.Signable.toBinary (1 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.EmbeddedSchema_Fields.enumField)]
+             Universum.. (Universum.&))
+instance Data.Signable.Signable Proto.EmbeddedSchema.Embedded'Msg'Enum where
+  toBinary
+    = Universum.maybe
+        (Universum.error "ENUM_OVERFLOW") Data.Signable.toBinary
+        Universum..
+          ((Data.Signable.safeFromIntegral ::
+              Universum.Int -> Universum.Maybe Universum.Int32)
+             Universum.. Universum.fromEnum)
+instance Data.Signable.Signable Proto.EmbeddedSchema.Msg where
+  toBinary
+    = Universum.mconcat
+        Universum..
+          ((Universum.<&>)
+             [(Universum.<>) (Data.Signable.toBinary (1 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.EmbeddedSchema_Fields.enumField)]
+             Universum.. (Universum.&))
+instance Data.Signable.Signable Proto.EmbeddedSchema.Msg'Enum where
+  toBinary
+    = Universum.maybe
+        (Universum.error "ENUM_OVERFLOW") Data.Signable.toBinary
+        Universum..
+          ((Data.Signable.safeFromIntegral ::
+              Universum.Int -> Universum.Maybe Universum.Int32)
+             Universum.. Universum.fromEnum)
+instance Data.Signable.Signable Proto.Number.Payload where
+  toBinary
+    = Universum.mconcat
+        Universum..
+          ((Universum.<&>)
+             [(Universum.<>) (Data.Signable.toBinary (1 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.Number_Fields.one),
+              (Universum.<>) (Data.Signable.toBinary (2 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.Number_Fields.two),
+              (Universum.<>) (Data.Signable.toBinary (3 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.Number_Fields.three),
+              (Universum.<>) (Data.Signable.toBinary (4 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.Number_Fields.four)]
+             Universum.. (Universum.&))
+instance Data.Signable.Signable Proto.RepeatedMsg.Payload where
+  toBinary
+    = Universum.mconcat
+        Universum..
+          ((Universum.<&>)
+             [Data.Signable.ifThenElse
+                GHC.List.null
+                (Universum.const Universum.mempty)
+                ((Universum.<>) (Data.Signable.toBinary (1 :: Universum.Int32))
+                   Universum.. Data.Signable.toBinary)
+                Universum.. Universum.view Proto.RepeatedMsg_Fields.msg]
+             Universum.. (Universum.&))
+instance Data.Signable.Signable Proto.RepeatedMsg.Payload'Msg where
+  toBinary
+    = Universum.mconcat
+        Universum..
+          ((Universum.<&>)
+             [(Universum.<>) (Data.Signable.toBinary (1 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.RepeatedMsg_Fields.x)]
+             Universum.. (Universum.&))
+instance Data.Signable.Signable Proto.ReservedKeyword.Payload where
+  toBinary
+    = Universum.mconcat
+        Universum..
+          ((Universum.<&>)
+             [(Universum.<>) (Data.Signable.toBinary (1 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.ReservedKeyword_Fields.module'),
+              Data.Signable.ifThenElse
+                GHC.List.null
+                (Universum.const Universum.mempty)
+                ((Universum.<>) (Data.Signable.toBinary (2 :: Universum.Int32))
+                   Universum.. Data.Signable.toBinary)
+                Universum.. Universum.view Proto.ReservedKeyword_Fields.data',
+              Data.Signable.ifThenElse
+                GHC.List.null
+                (Universum.const Universum.mempty)
+                ((Universum.<>) (Data.Signable.toBinary (3 :: Universum.Int32))
+                   Universum.. Data.Signable.toBinary)
+                Universum.. Universum.view Proto.ReservedKeyword_Fields.type',
+              Universum.maybe
+                Universum.mempty
+                ((Universum.<>) (Data.Signable.toBinary (4 :: Universum.Int32))
+                   Universum.. Data.Signable.toBinary)
+                Universum..
+                  Universum.view Proto.ReservedKeyword_Fields.maybe'class',
+              (Universum.<>) (Data.Signable.toBinary (5 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.ReservedKeyword_Fields.instance'),
+              (Universum.<>) (Data.Signable.toBinary (6 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.ReservedKeyword_Fields.if')]
+             Universum.. (Universum.&))
+instance Data.Signable.Signable Proto.ReservedKeyword.Payload'List where
+  toBinary
+    = Universum.mconcat
+        Universum..
+          ((Universum.<&>)
+             [Universum.maybe
+                Universum.mempty
+                ((Universum.<>) (Data.Signable.toBinary (1 :: Universum.Int32))
+                   Universum.. Data.Signable.toBinary)
+                Universum.. Universum.view Proto.ReservedKeyword_Fields.maybe'x,
+              Universum.maybe
+                Universum.mempty
+                ((Universum.<>) (Data.Signable.toBinary (2 :: Universum.Int32))
+                   Universum.. Data.Signable.toBinary)
+                Universum.. Universum.view Proto.ReservedKeyword_Fields.maybe'xs]
+             Universum.. (Universum.&))
+instance Data.Signable.Signable Proto.Text.Payload where
+  toBinary
+    = Universum.mconcat
+        Universum..
+          ((Universum.<&>)
+             [(Universum.<>) (Data.Signable.toBinary (1 :: Universum.Int32))
+                Universum..
+                  (Data.Signable.toBinary
+                     Universum.. Universum.view Proto.Text_Fields.text)]
+             Universum.. (Universum.&))
