diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,31 +1,37 @@
 # Revision history for lsp-types
 
-## 2.1.0.0
+## 2.1.1.0 -- 2024-02-24
 
+- Require aeson 2
+- Accept `null` in place of a missing field, a common mistake in spec compliance.
+- Arbitrary instances for everything now exist and are exported via the new `lsp-types-quickcheck` library
+
+## 2.1.0.0 -- 2023-11-13
+
 - Add `dynamicRegistrationSupported` to `Capabilities`.
 - Fully update `fullCaps` for recent spec versions.
 - Support GHC 9.8, drop checked support for GHC 8.10
 
-## 2.0.2.0
+## 2.0.2.0 -- 2023-08-24
 
-- Add `Language.LSP.Protocol.Utils.Misc.prettyJSON :: Value -> Doc ann` for prettyprinting JSON, 
+- Add `Language.LSP.Protocol.Utils.Misc.prettyJSON :: Value -> Doc ann` for prettyprinting JSON,
   and `ViaJSON` as a deriving-via newtype wrapper for it.
 - Generate `Pretty` instances for all LSP types using `ViaJSON`.
 
-## 2.0.1.1
+## 2.0.1.1 -- 2023-08-08
 
 * Fix parsing of notifications with missing params
 
-## 2.0.1.0
+## 2.0.1.0 -- 2023-07-14
 
 * Removed deprecation pragmas from fields, as these cannot currently be avoided.
 * Added `isOptionalMethod`, that checks whether a method is optional according to the spec.
 
-## 2.0.0.1
+## 2.0.0.1 -- 2023-06-16
 
 * Fixed missing `extra-source-files` for `metamodel.json`.
 
-## 2.0.0.0
+## 2.0.0.0 -- 2023-06-14
 
 * Breaking change: major restructure to generate types and methods from the LSP metamodel.
     * Full support for version 3.17 of the LSP specification, many accuracy fixes
@@ -36,23 +42,27 @@
     * Three top level modules: `Types` (main protocol types), `Message` (messages and methods), `Capabilities` (capabilities)
 * New typeclasses for handling LSP enumerations: `LspEnum` and `LspOpenEnum`
 
-## 1.6.0.0
+## 1.6.0.1 -- 2023-12-02
 
+* Add `LANGUAGE DuplicateRecordFields` to facilitate building with GHC 9.8
+
+## 1.6.0.0 -- 2022-09-13
+
 * Add `isSubRangeOf` and `positionInRange` helper functions
 * Add `ServerCancelled`, `RequestFailed` and `ErrorCodeCustom` server error types
 * Fix "workspace/semanticTokens/refresh" to be a server method instead of a client method
 * Use a packed representation for `NormalizedFilePath`
 * Add conversions from `OsPath` to `NormalizedFilePath` in `Language.LSP.Types.Uri.OsPath` when using new enough `filepath`
- 
-## 1.5.0.0
 
+## 1.5.0.0 -- 2022-06-20
+
 * VFS module moved from `lsp-types` to `lsp`, as it relates to the actual implementation of a LSP server.
 
-## 1.4.0.1
+## 1.4.0.1 -- 2022-01-20
 
 * Fix result type of selection range requests.
 
-## 1.4.0.0
+## 1.4.0.0 -- 2021-12-28
 
 * Aeson 2 compatibility (#360) (@michaelpj)
 * Reduced dependency footprint (#383, #384) (@Bodigrim)
@@ -62,15 +72,15 @@
 * Fix the Semigroup instance for MarkupContent (#361) (@michaelpj)
 * Various improvements to spec conformance (@michaelpj)
 
-## 1.3.0.1
+## 1.3.0.1 -- 2021-08-06
 
 * Rollback NFP interning (#344) (@pepeiborra)
 
-## 1.3.0.0
+## 1.3.0.0 -- 2021-07-31
 
 * Intern NormalizedFilePaths (#340) (@pepeiborra)
 
-## 1.2.0.1
+## 1.2.0.1 -- unpublished
 
 * Add compatibility with GHC 9.2 (#345) (@fendor)
 * Fix missing lenses (@michaelpj)
@@ -80,7 +90,7 @@
 * Do not crash on workspace/didChangeConfiguration (#321) (@strager)
 * Improve error messages on JSON decode failures (#320) (@strager)
 
-## 1.2.0.0
+## 1.2.0.0 -- 2021-03-28
 
 * Prevent crashing when optional fields are missing (@anka-213)
 * Use StrictData (@wz1000)
@@ -97,7 +107,7 @@
 * Support change annotations (#302) (@michaelpj)
 * Add some more missing lenses (#307) (@michaelpj)
 
-## 1.1.0.0
+## 1.1.0.0 -- 2021-02-14
 
 * Fix prepareRename reponse and prepareProvider (@kirelagin)
 * Fix deriving instance of MonadUnliftIO (@banacorn)
@@ -130,7 +140,7 @@
 * Use Text over String in more places (@wz1000)
 * Add missing lenses (@wz1000, @bubba)
 
-## 1.0.0.0
+## 1.0.0.0 -- 2020-10-15
 
 1.0.0.0 is a major rework with both internal and external facing changes, and
 will require manual migration.
@@ -229,10 +239,10 @@
 `LanguageContextEnv` needed to run an `LspT`, as well as anything else your
 monad needs.
 ```haskell
-type 
+type
 ServerDefinition { ...
 , doInitialize = \env _req -> pure $ Right env
-, interpretHandler = \env -> Iso 
+, interpretHandler = \env -> Iso
    (runLspT env) -- how to convert from IO ~> m
    liftIO        -- how to convert from m ~> IO
 }
@@ -248,7 +258,7 @@
 5. Remove any storage/use of `LspFuncs` and instead call the corresponding
    functions directly from your monad instead of `IO`
 
-## 0.23.0.0
+## 0.23.0.0 -- 2020-10-05
 
 * Add runWith for transporots other than stdio (@paulyoung)
 * Fix race condition in event captures (@bgamari)
@@ -259,12 +269,12 @@
   NormalizedFilePath (@cocreature)
 * Fix ordering of TH splices (@fendor)
 
-## 0.22.0.0
+## 0.22.0.0 -- 2020-05-04
 
 * ResponseMessage results are now an Either type (@greenhat)
 * Support for GHC 8.10.1
 
-## 0.21.0.0
+## 0.21.0.0 -- 2020-03-21
 
 * Stop getCompletionPrefix from crashing if beforePos is empty
 * Add DidChangeWatchedFilesRegistrationOptions
@@ -274,7 +284,7 @@
 * Correctly fix the problem with '$/' notifications
 * Add azure ci
 
-## 0.20.0.0
+## 0.20.0.0 -- 2020-02-04T
 
 * Force utf8 encoding when writing vfs temp files
 * Don't log errors for '$/' notifications (@jinwoo)
@@ -334,7 +344,7 @@
 
 * Add types for `window/progress` notifications.
 
-## 0.8.3.0
+## 0.8.3.0 -- unpublished
 
 * Add `MarkupContent` to `HoverResponse`, and (some) json roundtrip tests.
 
@@ -387,11 +397,11 @@
 * CodeAction support as per v3.8 of the specification, by @Bubba
 * Update VersionedTextDocumentIdentifier to match specification, by @Bubba.
 
-## 0.3.0.0
+## 0.3.0.0 -- unpublished
 
 * Handle TextDocumentSync fallbacks with new TDS type.
 
-## 0.2.3.0
+## 0.2.3.0 -- unpublished
 
 * GHC 8.4.3 support
 * Introduce additional error codes as per the LSP spec. By @Bubba
diff --git a/generated/Language/LSP/Protocol/Internal/Lens.hs b/generated/Language/LSP/Protocol/Internal/Lens.hs
deleted file mode 100644
--- a/generated/Language/LSP/Protocol/Internal/Lens.hs
+++ /dev/null
@@ -1,637 +0,0 @@
-{- ORMOLU_DISABLE -}
-{- HLINT ignore -}
--- THIS IS A GENERATED FILE, DO NOT EDIT
-{-# LANGUAGE TemplateHaskell #-}
-{-# OPTIONS_GHC -Wno-unused-imports #-}
-{-# OPTIONS_GHC -Wno-unused-matches #-}
-{-# OPTIONS_GHC -Wno-deprecations #-}
-module Language.LSP.Protocol.Internal.Lens where
-
-import qualified Control.Lens.TH
-import qualified Language.LSP.Protocol.Internal.Types.AnnotatedTextEdit
-import qualified Language.LSP.Protocol.Internal.Types.ApplyWorkspaceEditParams
-import qualified Language.LSP.Protocol.Internal.Types.ApplyWorkspaceEditResult
-import qualified Language.LSP.Protocol.Internal.Types.BaseSymbolInformation
-import qualified Language.LSP.Protocol.Internal.Types.CallHierarchyClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.CallHierarchyIncomingCall
-import qualified Language.LSP.Protocol.Internal.Types.CallHierarchyIncomingCallsParams
-import qualified Language.LSP.Protocol.Internal.Types.CallHierarchyItem
-import qualified Language.LSP.Protocol.Internal.Types.CallHierarchyOptions
-import qualified Language.LSP.Protocol.Internal.Types.CallHierarchyOutgoingCall
-import qualified Language.LSP.Protocol.Internal.Types.CallHierarchyOutgoingCallsParams
-import qualified Language.LSP.Protocol.Internal.Types.CallHierarchyPrepareParams
-import qualified Language.LSP.Protocol.Internal.Types.CallHierarchyRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.CancelParams
-import qualified Language.LSP.Protocol.Internal.Types.ChangeAnnotation
-import qualified Language.LSP.Protocol.Internal.Types.ClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.CodeAction
-import qualified Language.LSP.Protocol.Internal.Types.CodeActionClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.CodeActionContext
-import qualified Language.LSP.Protocol.Internal.Types.CodeActionOptions
-import qualified Language.LSP.Protocol.Internal.Types.CodeActionParams
-import qualified Language.LSP.Protocol.Internal.Types.CodeActionRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.CodeDescription
-import qualified Language.LSP.Protocol.Internal.Types.CodeLens
-import qualified Language.LSP.Protocol.Internal.Types.CodeLensClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.CodeLensOptions
-import qualified Language.LSP.Protocol.Internal.Types.CodeLensParams
-import qualified Language.LSP.Protocol.Internal.Types.CodeLensRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.CodeLensWorkspaceClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.Color
-import qualified Language.LSP.Protocol.Internal.Types.ColorInformation
-import qualified Language.LSP.Protocol.Internal.Types.ColorPresentation
-import qualified Language.LSP.Protocol.Internal.Types.ColorPresentationParams
-import qualified Language.LSP.Protocol.Internal.Types.Command
-import qualified Language.LSP.Protocol.Internal.Types.CompletionClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.CompletionContext
-import qualified Language.LSP.Protocol.Internal.Types.CompletionItem
-import qualified Language.LSP.Protocol.Internal.Types.CompletionItemLabelDetails
-import qualified Language.LSP.Protocol.Internal.Types.CompletionList
-import qualified Language.LSP.Protocol.Internal.Types.CompletionOptions
-import qualified Language.LSP.Protocol.Internal.Types.CompletionParams
-import qualified Language.LSP.Protocol.Internal.Types.CompletionRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.ConfigurationItem
-import qualified Language.LSP.Protocol.Internal.Types.ConfigurationParams
-import qualified Language.LSP.Protocol.Internal.Types.CreateFile
-import qualified Language.LSP.Protocol.Internal.Types.CreateFileOptions
-import qualified Language.LSP.Protocol.Internal.Types.CreateFilesParams
-import qualified Language.LSP.Protocol.Internal.Types.DeclarationClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.DeclarationOptions
-import qualified Language.LSP.Protocol.Internal.Types.DeclarationParams
-import qualified Language.LSP.Protocol.Internal.Types.DeclarationRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.DefinitionClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.DefinitionOptions
-import qualified Language.LSP.Protocol.Internal.Types.DefinitionParams
-import qualified Language.LSP.Protocol.Internal.Types.DefinitionRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.DeleteFile
-import qualified Language.LSP.Protocol.Internal.Types.DeleteFileOptions
-import qualified Language.LSP.Protocol.Internal.Types.DeleteFilesParams
-import qualified Language.LSP.Protocol.Internal.Types.Diagnostic
-import qualified Language.LSP.Protocol.Internal.Types.DiagnosticClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.DiagnosticOptions
-import qualified Language.LSP.Protocol.Internal.Types.DiagnosticRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.DiagnosticRelatedInformation
-import qualified Language.LSP.Protocol.Internal.Types.DiagnosticServerCancellationData
-import qualified Language.LSP.Protocol.Internal.Types.DiagnosticWorkspaceClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.DidChangeConfigurationClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.DidChangeConfigurationParams
-import qualified Language.LSP.Protocol.Internal.Types.DidChangeConfigurationRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.DidChangeNotebookDocumentParams
-import qualified Language.LSP.Protocol.Internal.Types.DidChangeTextDocumentParams
-import qualified Language.LSP.Protocol.Internal.Types.DidChangeWatchedFilesClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.DidChangeWatchedFilesParams
-import qualified Language.LSP.Protocol.Internal.Types.DidChangeWatchedFilesRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.DidChangeWorkspaceFoldersParams
-import qualified Language.LSP.Protocol.Internal.Types.DidCloseNotebookDocumentParams
-import qualified Language.LSP.Protocol.Internal.Types.DidCloseTextDocumentParams
-import qualified Language.LSP.Protocol.Internal.Types.DidOpenNotebookDocumentParams
-import qualified Language.LSP.Protocol.Internal.Types.DidOpenTextDocumentParams
-import qualified Language.LSP.Protocol.Internal.Types.DidSaveNotebookDocumentParams
-import qualified Language.LSP.Protocol.Internal.Types.DidSaveTextDocumentParams
-import qualified Language.LSP.Protocol.Internal.Types.DocumentColorClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.DocumentColorOptions
-import qualified Language.LSP.Protocol.Internal.Types.DocumentColorParams
-import qualified Language.LSP.Protocol.Internal.Types.DocumentColorRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.DocumentDiagnosticParams
-import qualified Language.LSP.Protocol.Internal.Types.DocumentDiagnosticReportPartialResult
-import qualified Language.LSP.Protocol.Internal.Types.DocumentFormattingClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.DocumentFormattingOptions
-import qualified Language.LSP.Protocol.Internal.Types.DocumentFormattingParams
-import qualified Language.LSP.Protocol.Internal.Types.DocumentFormattingRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.DocumentHighlight
-import qualified Language.LSP.Protocol.Internal.Types.DocumentHighlightClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.DocumentHighlightOptions
-import qualified Language.LSP.Protocol.Internal.Types.DocumentHighlightParams
-import qualified Language.LSP.Protocol.Internal.Types.DocumentHighlightRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.DocumentLink
-import qualified Language.LSP.Protocol.Internal.Types.DocumentLinkClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.DocumentLinkOptions
-import qualified Language.LSP.Protocol.Internal.Types.DocumentLinkParams
-import qualified Language.LSP.Protocol.Internal.Types.DocumentLinkRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.DocumentOnTypeFormattingClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.DocumentOnTypeFormattingOptions
-import qualified Language.LSP.Protocol.Internal.Types.DocumentOnTypeFormattingParams
-import qualified Language.LSP.Protocol.Internal.Types.DocumentOnTypeFormattingRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.DocumentRangeFormattingClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.DocumentRangeFormattingOptions
-import qualified Language.LSP.Protocol.Internal.Types.DocumentRangeFormattingParams
-import qualified Language.LSP.Protocol.Internal.Types.DocumentRangeFormattingRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.DocumentSymbol
-import qualified Language.LSP.Protocol.Internal.Types.DocumentSymbolClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.DocumentSymbolOptions
-import qualified Language.LSP.Protocol.Internal.Types.DocumentSymbolParams
-import qualified Language.LSP.Protocol.Internal.Types.DocumentSymbolRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.ExecuteCommandClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.ExecuteCommandOptions
-import qualified Language.LSP.Protocol.Internal.Types.ExecuteCommandParams
-import qualified Language.LSP.Protocol.Internal.Types.ExecuteCommandRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.ExecutionSummary
-import qualified Language.LSP.Protocol.Internal.Types.FileCreate
-import qualified Language.LSP.Protocol.Internal.Types.FileDelete
-import qualified Language.LSP.Protocol.Internal.Types.FileEvent
-import qualified Language.LSP.Protocol.Internal.Types.FileOperationClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.FileOperationFilter
-import qualified Language.LSP.Protocol.Internal.Types.FileOperationOptions
-import qualified Language.LSP.Protocol.Internal.Types.FileOperationPattern
-import qualified Language.LSP.Protocol.Internal.Types.FileOperationPatternOptions
-import qualified Language.LSP.Protocol.Internal.Types.FileOperationRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.FileRename
-import qualified Language.LSP.Protocol.Internal.Types.FileSystemWatcher
-import qualified Language.LSP.Protocol.Internal.Types.FoldingRange
-import qualified Language.LSP.Protocol.Internal.Types.FoldingRangeClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.FoldingRangeOptions
-import qualified Language.LSP.Protocol.Internal.Types.FoldingRangeParams
-import qualified Language.LSP.Protocol.Internal.Types.FoldingRangeRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.FormattingOptions
-import qualified Language.LSP.Protocol.Internal.Types.FullDocumentDiagnosticReport
-import qualified Language.LSP.Protocol.Internal.Types.GeneralClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.Hover
-import qualified Language.LSP.Protocol.Internal.Types.HoverClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.HoverOptions
-import qualified Language.LSP.Protocol.Internal.Types.HoverParams
-import qualified Language.LSP.Protocol.Internal.Types.HoverRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.ImplementationClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.ImplementationOptions
-import qualified Language.LSP.Protocol.Internal.Types.ImplementationParams
-import qualified Language.LSP.Protocol.Internal.Types.ImplementationRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.InitializeError
-import qualified Language.LSP.Protocol.Internal.Types.InitializeParams
-import qualified Language.LSP.Protocol.Internal.Types.InitializeResult
-import qualified Language.LSP.Protocol.Internal.Types.InitializedParams
-import qualified Language.LSP.Protocol.Internal.Types.InlayHint
-import qualified Language.LSP.Protocol.Internal.Types.InlayHintClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.InlayHintLabelPart
-import qualified Language.LSP.Protocol.Internal.Types.InlayHintOptions
-import qualified Language.LSP.Protocol.Internal.Types.InlayHintParams
-import qualified Language.LSP.Protocol.Internal.Types.InlayHintRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.InlayHintWorkspaceClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.InlineValueClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.InlineValueContext
-import qualified Language.LSP.Protocol.Internal.Types.InlineValueEvaluatableExpression
-import qualified Language.LSP.Protocol.Internal.Types.InlineValueOptions
-import qualified Language.LSP.Protocol.Internal.Types.InlineValueParams
-import qualified Language.LSP.Protocol.Internal.Types.InlineValueRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.InlineValueText
-import qualified Language.LSP.Protocol.Internal.Types.InlineValueVariableLookup
-import qualified Language.LSP.Protocol.Internal.Types.InlineValueWorkspaceClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.InsertReplaceEdit
-import qualified Language.LSP.Protocol.Internal.Types.LinkedEditingRangeClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.LinkedEditingRangeOptions
-import qualified Language.LSP.Protocol.Internal.Types.LinkedEditingRangeParams
-import qualified Language.LSP.Protocol.Internal.Types.LinkedEditingRangeRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.LinkedEditingRanges
-import qualified Language.LSP.Protocol.Internal.Types.Location
-import qualified Language.LSP.Protocol.Internal.Types.LocationLink
-import qualified Language.LSP.Protocol.Internal.Types.LogMessageParams
-import qualified Language.LSP.Protocol.Internal.Types.LogTraceParams
-import qualified Language.LSP.Protocol.Internal.Types.MarkdownClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.MarkupContent
-import qualified Language.LSP.Protocol.Internal.Types.MessageActionItem
-import qualified Language.LSP.Protocol.Internal.Types.Moniker
-import qualified Language.LSP.Protocol.Internal.Types.MonikerClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.MonikerOptions
-import qualified Language.LSP.Protocol.Internal.Types.MonikerParams
-import qualified Language.LSP.Protocol.Internal.Types.MonikerRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.NotebookCell
-import qualified Language.LSP.Protocol.Internal.Types.NotebookCellArrayChange
-import qualified Language.LSP.Protocol.Internal.Types.NotebookCellTextDocumentFilter
-import qualified Language.LSP.Protocol.Internal.Types.NotebookDocument
-import qualified Language.LSP.Protocol.Internal.Types.NotebookDocumentChangeEvent
-import qualified Language.LSP.Protocol.Internal.Types.NotebookDocumentClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.NotebookDocumentIdentifier
-import qualified Language.LSP.Protocol.Internal.Types.NotebookDocumentSyncClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.NotebookDocumentSyncOptions
-import qualified Language.LSP.Protocol.Internal.Types.NotebookDocumentSyncRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.OptionalVersionedTextDocumentIdentifier
-import qualified Language.LSP.Protocol.Internal.Types.ParameterInformation
-import qualified Language.LSP.Protocol.Internal.Types.PartialResultParams
-import qualified Language.LSP.Protocol.Internal.Types.Position
-import qualified Language.LSP.Protocol.Internal.Types.PrepareRenameParams
-import qualified Language.LSP.Protocol.Internal.Types.PreviousResultId
-import qualified Language.LSP.Protocol.Internal.Types.ProgressParams
-import qualified Language.LSP.Protocol.Internal.Types.PublishDiagnosticsClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.PublishDiagnosticsParams
-import qualified Language.LSP.Protocol.Internal.Types.Range
-import qualified Language.LSP.Protocol.Internal.Types.ReferenceClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.ReferenceContext
-import qualified Language.LSP.Protocol.Internal.Types.ReferenceOptions
-import qualified Language.LSP.Protocol.Internal.Types.ReferenceParams
-import qualified Language.LSP.Protocol.Internal.Types.ReferenceRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.Registration
-import qualified Language.LSP.Protocol.Internal.Types.RegistrationParams
-import qualified Language.LSP.Protocol.Internal.Types.RegularExpressionsClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.RelatedFullDocumentDiagnosticReport
-import qualified Language.LSP.Protocol.Internal.Types.RelatedUnchangedDocumentDiagnosticReport
-import qualified Language.LSP.Protocol.Internal.Types.RelativePattern
-import qualified Language.LSP.Protocol.Internal.Types.RenameClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.RenameFile
-import qualified Language.LSP.Protocol.Internal.Types.RenameFileOptions
-import qualified Language.LSP.Protocol.Internal.Types.RenameFilesParams
-import qualified Language.LSP.Protocol.Internal.Types.RenameOptions
-import qualified Language.LSP.Protocol.Internal.Types.RenameParams
-import qualified Language.LSP.Protocol.Internal.Types.RenameRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.ResourceOperation
-import qualified Language.LSP.Protocol.Internal.Types.SaveOptions
-import qualified Language.LSP.Protocol.Internal.Types.SelectionRange
-import qualified Language.LSP.Protocol.Internal.Types.SelectionRangeClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.SelectionRangeOptions
-import qualified Language.LSP.Protocol.Internal.Types.SelectionRangeParams
-import qualified Language.LSP.Protocol.Internal.Types.SelectionRangeRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.SemanticTokens
-import qualified Language.LSP.Protocol.Internal.Types.SemanticTokensClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.SemanticTokensDelta
-import qualified Language.LSP.Protocol.Internal.Types.SemanticTokensDeltaParams
-import qualified Language.LSP.Protocol.Internal.Types.SemanticTokensDeltaPartialResult
-import qualified Language.LSP.Protocol.Internal.Types.SemanticTokensEdit
-import qualified Language.LSP.Protocol.Internal.Types.SemanticTokensLegend
-import qualified Language.LSP.Protocol.Internal.Types.SemanticTokensOptions
-import qualified Language.LSP.Protocol.Internal.Types.SemanticTokensParams
-import qualified Language.LSP.Protocol.Internal.Types.SemanticTokensPartialResult
-import qualified Language.LSP.Protocol.Internal.Types.SemanticTokensRangeParams
-import qualified Language.LSP.Protocol.Internal.Types.SemanticTokensRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.SemanticTokensWorkspaceClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.ServerCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.SetTraceParams
-import qualified Language.LSP.Protocol.Internal.Types.ShowDocumentClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.ShowDocumentParams
-import qualified Language.LSP.Protocol.Internal.Types.ShowDocumentResult
-import qualified Language.LSP.Protocol.Internal.Types.ShowMessageParams
-import qualified Language.LSP.Protocol.Internal.Types.ShowMessageRequestClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.ShowMessageRequestParams
-import qualified Language.LSP.Protocol.Internal.Types.SignatureHelp
-import qualified Language.LSP.Protocol.Internal.Types.SignatureHelpClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.SignatureHelpContext
-import qualified Language.LSP.Protocol.Internal.Types.SignatureHelpOptions
-import qualified Language.LSP.Protocol.Internal.Types.SignatureHelpParams
-import qualified Language.LSP.Protocol.Internal.Types.SignatureHelpRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.SignatureInformation
-import qualified Language.LSP.Protocol.Internal.Types.StaticRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.SymbolInformation
-import qualified Language.LSP.Protocol.Internal.Types.TextDocumentChangeRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.TextDocumentClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.TextDocumentEdit
-import qualified Language.LSP.Protocol.Internal.Types.TextDocumentIdentifier
-import qualified Language.LSP.Protocol.Internal.Types.TextDocumentItem
-import qualified Language.LSP.Protocol.Internal.Types.TextDocumentPositionParams
-import qualified Language.LSP.Protocol.Internal.Types.TextDocumentRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.TextDocumentSaveRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.TextDocumentSyncClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.TextDocumentSyncOptions
-import qualified Language.LSP.Protocol.Internal.Types.TextEdit
-import qualified Language.LSP.Protocol.Internal.Types.TypeDefinitionClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.TypeDefinitionOptions
-import qualified Language.LSP.Protocol.Internal.Types.TypeDefinitionParams
-import qualified Language.LSP.Protocol.Internal.Types.TypeDefinitionRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.TypeHierarchyClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.TypeHierarchyItem
-import qualified Language.LSP.Protocol.Internal.Types.TypeHierarchyOptions
-import qualified Language.LSP.Protocol.Internal.Types.TypeHierarchyPrepareParams
-import qualified Language.LSP.Protocol.Internal.Types.TypeHierarchyRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.TypeHierarchySubtypesParams
-import qualified Language.LSP.Protocol.Internal.Types.TypeHierarchySupertypesParams
-import qualified Language.LSP.Protocol.Internal.Types.UInitializeParams
-import qualified Language.LSP.Protocol.Internal.Types.UnchangedDocumentDiagnosticReport
-import qualified Language.LSP.Protocol.Internal.Types.Unregistration
-import qualified Language.LSP.Protocol.Internal.Types.UnregistrationParams
-import qualified Language.LSP.Protocol.Internal.Types.VersionedNotebookDocumentIdentifier
-import qualified Language.LSP.Protocol.Internal.Types.VersionedTextDocumentIdentifier
-import qualified Language.LSP.Protocol.Internal.Types.WillSaveTextDocumentParams
-import qualified Language.LSP.Protocol.Internal.Types.WindowClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.WorkDoneProgressBegin
-import qualified Language.LSP.Protocol.Internal.Types.WorkDoneProgressCancelParams
-import qualified Language.LSP.Protocol.Internal.Types.WorkDoneProgressCreateParams
-import qualified Language.LSP.Protocol.Internal.Types.WorkDoneProgressEnd
-import qualified Language.LSP.Protocol.Internal.Types.WorkDoneProgressOptions
-import qualified Language.LSP.Protocol.Internal.Types.WorkDoneProgressParams
-import qualified Language.LSP.Protocol.Internal.Types.WorkDoneProgressReport
-import qualified Language.LSP.Protocol.Internal.Types.WorkspaceClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.WorkspaceDiagnosticParams
-import qualified Language.LSP.Protocol.Internal.Types.WorkspaceDiagnosticReport
-import qualified Language.LSP.Protocol.Internal.Types.WorkspaceDiagnosticReportPartialResult
-import qualified Language.LSP.Protocol.Internal.Types.WorkspaceEdit
-import qualified Language.LSP.Protocol.Internal.Types.WorkspaceEditClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.WorkspaceFolder
-import qualified Language.LSP.Protocol.Internal.Types.WorkspaceFoldersChangeEvent
-import qualified Language.LSP.Protocol.Internal.Types.WorkspaceFoldersInitializeParams
-import qualified Language.LSP.Protocol.Internal.Types.WorkspaceFoldersServerCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.WorkspaceFullDocumentDiagnosticReport
-import qualified Language.LSP.Protocol.Internal.Types.WorkspaceSymbol
-import qualified Language.LSP.Protocol.Internal.Types.WorkspaceSymbolClientCapabilities
-import qualified Language.LSP.Protocol.Internal.Types.WorkspaceSymbolOptions
-import qualified Language.LSP.Protocol.Internal.Types.WorkspaceSymbolParams
-import qualified Language.LSP.Protocol.Internal.Types.WorkspaceSymbolRegistrationOptions
-import qualified Language.LSP.Protocol.Internal.Types.WorkspaceUnchangedDocumentDiagnosticReport
-
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ImplementationParams.ImplementationParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.Location.Location
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ImplementationRegistrationOptions.ImplementationRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.TypeDefinitionParams.TypeDefinitionParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.TypeDefinitionRegistrationOptions.TypeDefinitionRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.WorkspaceFolder.WorkspaceFolder
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DidChangeWorkspaceFoldersParams.DidChangeWorkspaceFoldersParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ConfigurationParams.ConfigurationParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentColorParams.DocumentColorParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ColorInformation.ColorInformation
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentColorRegistrationOptions.DocumentColorRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ColorPresentationParams.ColorPresentationParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ColorPresentation.ColorPresentation
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.WorkDoneProgressOptions.WorkDoneProgressOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.TextDocumentRegistrationOptions.TextDocumentRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.FoldingRangeParams.FoldingRangeParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.FoldingRange.FoldingRange
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.FoldingRangeRegistrationOptions.FoldingRangeRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DeclarationParams.DeclarationParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DeclarationRegistrationOptions.DeclarationRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.SelectionRangeParams.SelectionRangeParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.SelectionRange.SelectionRange
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.SelectionRangeRegistrationOptions.SelectionRangeRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.WorkDoneProgressCreateParams.WorkDoneProgressCreateParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.WorkDoneProgressCancelParams.WorkDoneProgressCancelParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CallHierarchyPrepareParams.CallHierarchyPrepareParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CallHierarchyItem.CallHierarchyItem
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CallHierarchyRegistrationOptions.CallHierarchyRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CallHierarchyIncomingCallsParams.CallHierarchyIncomingCallsParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CallHierarchyIncomingCall.CallHierarchyIncomingCall
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CallHierarchyOutgoingCallsParams.CallHierarchyOutgoingCallsParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CallHierarchyOutgoingCall.CallHierarchyOutgoingCall
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.SemanticTokensParams.SemanticTokensParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.SemanticTokens.SemanticTokens
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.SemanticTokensPartialResult.SemanticTokensPartialResult
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.SemanticTokensRegistrationOptions.SemanticTokensRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.SemanticTokensDeltaParams.SemanticTokensDeltaParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.SemanticTokensDelta.SemanticTokensDelta
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.SemanticTokensDeltaPartialResult.SemanticTokensDeltaPartialResult
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.SemanticTokensRangeParams.SemanticTokensRangeParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ShowDocumentParams.ShowDocumentParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ShowDocumentResult.ShowDocumentResult
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.LinkedEditingRangeParams.LinkedEditingRangeParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.LinkedEditingRanges.LinkedEditingRanges
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.LinkedEditingRangeRegistrationOptions.LinkedEditingRangeRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CreateFilesParams.CreateFilesParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.WorkspaceEdit.WorkspaceEdit
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.FileOperationRegistrationOptions.FileOperationRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.RenameFilesParams.RenameFilesParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DeleteFilesParams.DeleteFilesParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.MonikerParams.MonikerParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.Moniker.Moniker
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.MonikerRegistrationOptions.MonikerRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.TypeHierarchyPrepareParams.TypeHierarchyPrepareParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.TypeHierarchyItem.TypeHierarchyItem
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.TypeHierarchyRegistrationOptions.TypeHierarchyRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.TypeHierarchySupertypesParams.TypeHierarchySupertypesParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.TypeHierarchySubtypesParams.TypeHierarchySubtypesParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.InlineValueParams.InlineValueParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.InlineValueRegistrationOptions.InlineValueRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.InlayHintParams.InlayHintParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.InlayHint.InlayHint
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.InlayHintRegistrationOptions.InlayHintRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentDiagnosticParams.DocumentDiagnosticParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentDiagnosticReportPartialResult.DocumentDiagnosticReportPartialResult
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DiagnosticServerCancellationData.DiagnosticServerCancellationData
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DiagnosticRegistrationOptions.DiagnosticRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.WorkspaceDiagnosticParams.WorkspaceDiagnosticParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.WorkspaceDiagnosticReport.WorkspaceDiagnosticReport
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.WorkspaceDiagnosticReportPartialResult.WorkspaceDiagnosticReportPartialResult
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DidOpenNotebookDocumentParams.DidOpenNotebookDocumentParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DidChangeNotebookDocumentParams.DidChangeNotebookDocumentParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DidSaveNotebookDocumentParams.DidSaveNotebookDocumentParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DidCloseNotebookDocumentParams.DidCloseNotebookDocumentParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.RegistrationParams.RegistrationParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.UnregistrationParams.UnregistrationParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.InitializeParams.InitializeParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.InitializeResult.InitializeResult
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.InitializeError.InitializeError
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.InitializedParams.InitializedParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DidChangeConfigurationParams.DidChangeConfigurationParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DidChangeConfigurationRegistrationOptions.DidChangeConfigurationRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ShowMessageParams.ShowMessageParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ShowMessageRequestParams.ShowMessageRequestParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.MessageActionItem.MessageActionItem
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.LogMessageParams.LogMessageParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DidOpenTextDocumentParams.DidOpenTextDocumentParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DidChangeTextDocumentParams.DidChangeTextDocumentParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.TextDocumentChangeRegistrationOptions.TextDocumentChangeRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DidCloseTextDocumentParams.DidCloseTextDocumentParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DidSaveTextDocumentParams.DidSaveTextDocumentParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.TextDocumentSaveRegistrationOptions.TextDocumentSaveRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.WillSaveTextDocumentParams.WillSaveTextDocumentParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.TextEdit.TextEdit
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DidChangeWatchedFilesParams.DidChangeWatchedFilesParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DidChangeWatchedFilesRegistrationOptions.DidChangeWatchedFilesRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.PublishDiagnosticsParams.PublishDiagnosticsParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CompletionParams.CompletionParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CompletionItem.CompletionItem
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CompletionList.CompletionList
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CompletionRegistrationOptions.CompletionRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.HoverParams.HoverParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.Hover.Hover
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.HoverRegistrationOptions.HoverRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.SignatureHelpParams.SignatureHelpParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.SignatureHelp.SignatureHelp
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.SignatureHelpRegistrationOptions.SignatureHelpRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DefinitionParams.DefinitionParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DefinitionRegistrationOptions.DefinitionRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ReferenceParams.ReferenceParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ReferenceRegistrationOptions.ReferenceRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentHighlightParams.DocumentHighlightParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentHighlight.DocumentHighlight
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentHighlightRegistrationOptions.DocumentHighlightRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentSymbolParams.DocumentSymbolParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.SymbolInformation.SymbolInformation
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentSymbol.DocumentSymbol
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentSymbolRegistrationOptions.DocumentSymbolRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CodeActionParams.CodeActionParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.Command.Command
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CodeAction.CodeAction
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CodeActionRegistrationOptions.CodeActionRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.WorkspaceSymbolParams.WorkspaceSymbolParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.WorkspaceSymbol.WorkspaceSymbol
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.WorkspaceSymbolRegistrationOptions.WorkspaceSymbolRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CodeLensParams.CodeLensParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CodeLens.CodeLens
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CodeLensRegistrationOptions.CodeLensRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentLinkParams.DocumentLinkParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentLink.DocumentLink
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentLinkRegistrationOptions.DocumentLinkRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentFormattingParams.DocumentFormattingParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentFormattingRegistrationOptions.DocumentFormattingRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentRangeFormattingParams.DocumentRangeFormattingParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentRangeFormattingRegistrationOptions.DocumentRangeFormattingRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentOnTypeFormattingParams.DocumentOnTypeFormattingParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentOnTypeFormattingRegistrationOptions.DocumentOnTypeFormattingRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.RenameParams.RenameParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.RenameRegistrationOptions.RenameRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.PrepareRenameParams.PrepareRenameParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ExecuteCommandParams.ExecuteCommandParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ExecuteCommandRegistrationOptions.ExecuteCommandRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ApplyWorkspaceEditParams.ApplyWorkspaceEditParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ApplyWorkspaceEditResult.ApplyWorkspaceEditResult
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.WorkDoneProgressBegin.WorkDoneProgressBegin
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.WorkDoneProgressReport.WorkDoneProgressReport
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.WorkDoneProgressEnd.WorkDoneProgressEnd
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.SetTraceParams.SetTraceParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.LogTraceParams.LogTraceParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CancelParams.CancelParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ProgressParams.ProgressParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.TextDocumentPositionParams.TextDocumentPositionParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.WorkDoneProgressParams.WorkDoneProgressParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.PartialResultParams.PartialResultParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.LocationLink.LocationLink
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.Range.Range
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ImplementationOptions.ImplementationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.StaticRegistrationOptions.StaticRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.TypeDefinitionOptions.TypeDefinitionOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.WorkspaceFoldersChangeEvent.WorkspaceFoldersChangeEvent
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ConfigurationItem.ConfigurationItem
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.TextDocumentIdentifier.TextDocumentIdentifier
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.Color.Color
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentColorOptions.DocumentColorOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.FoldingRangeOptions.FoldingRangeOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DeclarationOptions.DeclarationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.Position.Position
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.SelectionRangeOptions.SelectionRangeOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CallHierarchyOptions.CallHierarchyOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.SemanticTokensOptions.SemanticTokensOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.SemanticTokensEdit.SemanticTokensEdit
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.LinkedEditingRangeOptions.LinkedEditingRangeOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.FileCreate.FileCreate
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.TextDocumentEdit.TextDocumentEdit
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CreateFile.CreateFile
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.RenameFile.RenameFile
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DeleteFile.DeleteFile
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ChangeAnnotation.ChangeAnnotation
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.FileOperationFilter.FileOperationFilter
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.FileRename.FileRename
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.FileDelete.FileDelete
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.MonikerOptions.MonikerOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.TypeHierarchyOptions.TypeHierarchyOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.InlineValueContext.InlineValueContext
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.InlineValueText.InlineValueText
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.InlineValueVariableLookup.InlineValueVariableLookup
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.InlineValueEvaluatableExpression.InlineValueEvaluatableExpression
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.InlineValueOptions.InlineValueOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.InlayHintLabelPart.InlayHintLabelPart
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.MarkupContent.MarkupContent
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.InlayHintOptions.InlayHintOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.RelatedFullDocumentDiagnosticReport.RelatedFullDocumentDiagnosticReport
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.RelatedUnchangedDocumentDiagnosticReport.RelatedUnchangedDocumentDiagnosticReport
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.FullDocumentDiagnosticReport.FullDocumentDiagnosticReport
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.UnchangedDocumentDiagnosticReport.UnchangedDocumentDiagnosticReport
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DiagnosticOptions.DiagnosticOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.PreviousResultId.PreviousResultId
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.NotebookDocument.NotebookDocument
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.TextDocumentItem.TextDocumentItem
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.VersionedNotebookDocumentIdentifier.VersionedNotebookDocumentIdentifier
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.NotebookDocumentChangeEvent.NotebookDocumentChangeEvent
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.NotebookDocumentIdentifier.NotebookDocumentIdentifier
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.Registration.Registration
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.Unregistration.Unregistration
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.UInitializeParams.UInitializeParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.WorkspaceFoldersInitializeParams.WorkspaceFoldersInitializeParams
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ServerCapabilities.ServerCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.VersionedTextDocumentIdentifier.VersionedTextDocumentIdentifier
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.SaveOptions.SaveOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.FileEvent.FileEvent
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.FileSystemWatcher.FileSystemWatcher
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.Diagnostic.Diagnostic
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CompletionContext.CompletionContext
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CompletionItemLabelDetails.CompletionItemLabelDetails
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.InsertReplaceEdit.InsertReplaceEdit
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CompletionOptions.CompletionOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.HoverOptions.HoverOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.SignatureHelpContext.SignatureHelpContext
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.SignatureInformation.SignatureInformation
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.SignatureHelpOptions.SignatureHelpOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DefinitionOptions.DefinitionOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ReferenceContext.ReferenceContext
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ReferenceOptions.ReferenceOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentHighlightOptions.DocumentHighlightOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.BaseSymbolInformation.BaseSymbolInformation
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentSymbolOptions.DocumentSymbolOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CodeActionContext.CodeActionContext
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CodeActionOptions.CodeActionOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.WorkspaceSymbolOptions.WorkspaceSymbolOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CodeLensOptions.CodeLensOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentLinkOptions.DocumentLinkOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.FormattingOptions.FormattingOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentFormattingOptions.DocumentFormattingOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentRangeFormattingOptions.DocumentRangeFormattingOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentOnTypeFormattingOptions.DocumentOnTypeFormattingOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.RenameOptions.RenameOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ExecuteCommandOptions.ExecuteCommandOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.SemanticTokensLegend.SemanticTokensLegend
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.OptionalVersionedTextDocumentIdentifier.OptionalVersionedTextDocumentIdentifier
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.AnnotatedTextEdit.AnnotatedTextEdit
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ResourceOperation.ResourceOperation
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CreateFileOptions.CreateFileOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.RenameFileOptions.RenameFileOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DeleteFileOptions.DeleteFileOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.FileOperationPattern.FileOperationPattern
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.WorkspaceFullDocumentDiagnosticReport.WorkspaceFullDocumentDiagnosticReport
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.WorkspaceUnchangedDocumentDiagnosticReport.WorkspaceUnchangedDocumentDiagnosticReport
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.NotebookCell.NotebookCell
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.NotebookCellArrayChange.NotebookCellArrayChange
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ClientCapabilities.ClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.TextDocumentSyncOptions.TextDocumentSyncOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.NotebookDocumentSyncOptions.NotebookDocumentSyncOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.NotebookDocumentSyncRegistrationOptions.NotebookDocumentSyncRegistrationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.WorkspaceFoldersServerCapabilities.WorkspaceFoldersServerCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.FileOperationOptions.FileOperationOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CodeDescription.CodeDescription
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DiagnosticRelatedInformation.DiagnosticRelatedInformation
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ParameterInformation.ParameterInformation
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.NotebookCellTextDocumentFilter.NotebookCellTextDocumentFilter
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.FileOperationPatternOptions.FileOperationPatternOptions
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ExecutionSummary.ExecutionSummary
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.WorkspaceClientCapabilities.WorkspaceClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.TextDocumentClientCapabilities.TextDocumentClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.NotebookDocumentClientCapabilities.NotebookDocumentClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.WindowClientCapabilities.WindowClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.GeneralClientCapabilities.GeneralClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.RelativePattern.RelativePattern
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.WorkspaceEditClientCapabilities.WorkspaceEditClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DidChangeConfigurationClientCapabilities.DidChangeConfigurationClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DidChangeWatchedFilesClientCapabilities.DidChangeWatchedFilesClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.WorkspaceSymbolClientCapabilities.WorkspaceSymbolClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ExecuteCommandClientCapabilities.ExecuteCommandClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.SemanticTokensWorkspaceClientCapabilities.SemanticTokensWorkspaceClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CodeLensWorkspaceClientCapabilities.CodeLensWorkspaceClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.FileOperationClientCapabilities.FileOperationClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.InlineValueWorkspaceClientCapabilities.InlineValueWorkspaceClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.InlayHintWorkspaceClientCapabilities.InlayHintWorkspaceClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DiagnosticWorkspaceClientCapabilities.DiagnosticWorkspaceClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.TextDocumentSyncClientCapabilities.TextDocumentSyncClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CompletionClientCapabilities.CompletionClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.HoverClientCapabilities.HoverClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.SignatureHelpClientCapabilities.SignatureHelpClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DeclarationClientCapabilities.DeclarationClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DefinitionClientCapabilities.DefinitionClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.TypeDefinitionClientCapabilities.TypeDefinitionClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ImplementationClientCapabilities.ImplementationClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ReferenceClientCapabilities.ReferenceClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentHighlightClientCapabilities.DocumentHighlightClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentSymbolClientCapabilities.DocumentSymbolClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CodeActionClientCapabilities.CodeActionClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CodeLensClientCapabilities.CodeLensClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentLinkClientCapabilities.DocumentLinkClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentColorClientCapabilities.DocumentColorClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentFormattingClientCapabilities.DocumentFormattingClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentRangeFormattingClientCapabilities.DocumentRangeFormattingClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DocumentOnTypeFormattingClientCapabilities.DocumentOnTypeFormattingClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.RenameClientCapabilities.RenameClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.FoldingRangeClientCapabilities.FoldingRangeClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.SelectionRangeClientCapabilities.SelectionRangeClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.PublishDiagnosticsClientCapabilities.PublishDiagnosticsClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.CallHierarchyClientCapabilities.CallHierarchyClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.SemanticTokensClientCapabilities.SemanticTokensClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.LinkedEditingRangeClientCapabilities.LinkedEditingRangeClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.MonikerClientCapabilities.MonikerClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.TypeHierarchyClientCapabilities.TypeHierarchyClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.InlineValueClientCapabilities.InlineValueClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.InlayHintClientCapabilities.InlayHintClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.DiagnosticClientCapabilities.DiagnosticClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.NotebookDocumentSyncClientCapabilities.NotebookDocumentSyncClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ShowMessageRequestClientCapabilities.ShowMessageRequestClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.ShowDocumentClientCapabilities.ShowDocumentClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.RegularExpressionsClientCapabilities.RegularExpressionsClientCapabilities
-Control.Lens.TH.makeFieldsNoPrefix ''Language.LSP.Protocol.Internal.Types.MarkdownClientCapabilities.MarkdownClientCapabilities
diff --git a/generated/Language/LSP/Protocol/Internal/Meta.hs b/generated/Language/LSP/Protocol/Internal/Meta.hs
new file mode 100644
--- /dev/null
+++ b/generated/Language/LSP/Protocol/Internal/Meta.hs
@@ -0,0 +1,382 @@
+{- ORMOLU_DISABLE -}
+{- HLINT ignore -}
+-- THIS IS A GENERATED FILE, DO NOT EDIT
+{-# LANGUAGE TemplateHaskell #-}
+{-# OPTIONS_GHC -Wno-unused-imports #-}
+{-# OPTIONS_GHC -Wno-unused-matches #-}
+{-# OPTIONS_GHC -Wno-deprecations #-}
+module Language.LSP.Protocol.Internal.Meta where
+
+import qualified Language.Haskell.TH as TH
+import qualified Language.LSP.Protocol.Internal.Types
+
+structNames :: [TH.Name]
+structNames = [''Language.LSP.Protocol.Internal.Types.ImplementationParams
+  ,''Language.LSP.Protocol.Internal.Types.Location
+  ,''Language.LSP.Protocol.Internal.Types.ImplementationRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.TypeDefinitionParams
+  ,''Language.LSP.Protocol.Internal.Types.TypeDefinitionRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.WorkspaceFolder
+  ,''Language.LSP.Protocol.Internal.Types.DidChangeWorkspaceFoldersParams
+  ,''Language.LSP.Protocol.Internal.Types.ConfigurationParams
+  ,''Language.LSP.Protocol.Internal.Types.DocumentColorParams
+  ,''Language.LSP.Protocol.Internal.Types.ColorInformation
+  ,''Language.LSP.Protocol.Internal.Types.DocumentColorRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.ColorPresentationParams
+  ,''Language.LSP.Protocol.Internal.Types.ColorPresentation
+  ,''Language.LSP.Protocol.Internal.Types.WorkDoneProgressOptions
+  ,''Language.LSP.Protocol.Internal.Types.TextDocumentRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.FoldingRangeParams
+  ,''Language.LSP.Protocol.Internal.Types.FoldingRange
+  ,''Language.LSP.Protocol.Internal.Types.FoldingRangeRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.DeclarationParams
+  ,''Language.LSP.Protocol.Internal.Types.DeclarationRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.SelectionRangeParams
+  ,''Language.LSP.Protocol.Internal.Types.SelectionRange
+  ,''Language.LSP.Protocol.Internal.Types.SelectionRangeRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.WorkDoneProgressCreateParams
+  ,''Language.LSP.Protocol.Internal.Types.WorkDoneProgressCancelParams
+  ,''Language.LSP.Protocol.Internal.Types.CallHierarchyPrepareParams
+  ,''Language.LSP.Protocol.Internal.Types.CallHierarchyItem
+  ,''Language.LSP.Protocol.Internal.Types.CallHierarchyRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.CallHierarchyIncomingCallsParams
+  ,''Language.LSP.Protocol.Internal.Types.CallHierarchyIncomingCall
+  ,''Language.LSP.Protocol.Internal.Types.CallHierarchyOutgoingCallsParams
+  ,''Language.LSP.Protocol.Internal.Types.CallHierarchyOutgoingCall
+  ,''Language.LSP.Protocol.Internal.Types.SemanticTokensParams
+  ,''Language.LSP.Protocol.Internal.Types.SemanticTokens
+  ,''Language.LSP.Protocol.Internal.Types.SemanticTokensPartialResult
+  ,''Language.LSP.Protocol.Internal.Types.SemanticTokensRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.SemanticTokensDeltaParams
+  ,''Language.LSP.Protocol.Internal.Types.SemanticTokensDelta
+  ,''Language.LSP.Protocol.Internal.Types.SemanticTokensDeltaPartialResult
+  ,''Language.LSP.Protocol.Internal.Types.SemanticTokensRangeParams
+  ,''Language.LSP.Protocol.Internal.Types.ShowDocumentParams
+  ,''Language.LSP.Protocol.Internal.Types.ShowDocumentResult
+  ,''Language.LSP.Protocol.Internal.Types.LinkedEditingRangeParams
+  ,''Language.LSP.Protocol.Internal.Types.LinkedEditingRanges
+  ,''Language.LSP.Protocol.Internal.Types.LinkedEditingRangeRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.CreateFilesParams
+  ,''Language.LSP.Protocol.Internal.Types.WorkspaceEdit
+  ,''Language.LSP.Protocol.Internal.Types.FileOperationRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.RenameFilesParams
+  ,''Language.LSP.Protocol.Internal.Types.DeleteFilesParams
+  ,''Language.LSP.Protocol.Internal.Types.MonikerParams
+  ,''Language.LSP.Protocol.Internal.Types.Moniker
+  ,''Language.LSP.Protocol.Internal.Types.MonikerRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.TypeHierarchyPrepareParams
+  ,''Language.LSP.Protocol.Internal.Types.TypeHierarchyItem
+  ,''Language.LSP.Protocol.Internal.Types.TypeHierarchyRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.TypeHierarchySupertypesParams
+  ,''Language.LSP.Protocol.Internal.Types.TypeHierarchySubtypesParams
+  ,''Language.LSP.Protocol.Internal.Types.InlineValueParams
+  ,''Language.LSP.Protocol.Internal.Types.InlineValueRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.InlayHintParams
+  ,''Language.LSP.Protocol.Internal.Types.InlayHint
+  ,''Language.LSP.Protocol.Internal.Types.InlayHintRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.DocumentDiagnosticParams
+  ,''Language.LSP.Protocol.Internal.Types.DocumentDiagnosticReportPartialResult
+  ,''Language.LSP.Protocol.Internal.Types.DiagnosticServerCancellationData
+  ,''Language.LSP.Protocol.Internal.Types.DiagnosticRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.WorkspaceDiagnosticParams
+  ,''Language.LSP.Protocol.Internal.Types.WorkspaceDiagnosticReport
+  ,''Language.LSP.Protocol.Internal.Types.WorkspaceDiagnosticReportPartialResult
+  ,''Language.LSP.Protocol.Internal.Types.DidOpenNotebookDocumentParams
+  ,''Language.LSP.Protocol.Internal.Types.DidChangeNotebookDocumentParams
+  ,''Language.LSP.Protocol.Internal.Types.DidSaveNotebookDocumentParams
+  ,''Language.LSP.Protocol.Internal.Types.DidCloseNotebookDocumentParams
+  ,''Language.LSP.Protocol.Internal.Types.RegistrationParams
+  ,''Language.LSP.Protocol.Internal.Types.UnregistrationParams
+  ,''Language.LSP.Protocol.Internal.Types.InitializeParams
+  ,''Language.LSP.Protocol.Internal.Types.InitializeResult
+  ,''Language.LSP.Protocol.Internal.Types.InitializeError
+  ,''Language.LSP.Protocol.Internal.Types.InitializedParams
+  ,''Language.LSP.Protocol.Internal.Types.DidChangeConfigurationParams
+  ,''Language.LSP.Protocol.Internal.Types.DidChangeConfigurationRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.ShowMessageParams
+  ,''Language.LSP.Protocol.Internal.Types.ShowMessageRequestParams
+  ,''Language.LSP.Protocol.Internal.Types.MessageActionItem
+  ,''Language.LSP.Protocol.Internal.Types.LogMessageParams
+  ,''Language.LSP.Protocol.Internal.Types.DidOpenTextDocumentParams
+  ,''Language.LSP.Protocol.Internal.Types.DidChangeTextDocumentParams
+  ,''Language.LSP.Protocol.Internal.Types.TextDocumentChangeRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.DidCloseTextDocumentParams
+  ,''Language.LSP.Protocol.Internal.Types.DidSaveTextDocumentParams
+  ,''Language.LSP.Protocol.Internal.Types.TextDocumentSaveRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.WillSaveTextDocumentParams
+  ,''Language.LSP.Protocol.Internal.Types.TextEdit
+  ,''Language.LSP.Protocol.Internal.Types.DidChangeWatchedFilesParams
+  ,''Language.LSP.Protocol.Internal.Types.DidChangeWatchedFilesRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.PublishDiagnosticsParams
+  ,''Language.LSP.Protocol.Internal.Types.CompletionParams
+  ,''Language.LSP.Protocol.Internal.Types.CompletionItem
+  ,''Language.LSP.Protocol.Internal.Types.CompletionList
+  ,''Language.LSP.Protocol.Internal.Types.CompletionRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.HoverParams
+  ,''Language.LSP.Protocol.Internal.Types.Hover
+  ,''Language.LSP.Protocol.Internal.Types.HoverRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.SignatureHelpParams
+  ,''Language.LSP.Protocol.Internal.Types.SignatureHelp
+  ,''Language.LSP.Protocol.Internal.Types.SignatureHelpRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.DefinitionParams
+  ,''Language.LSP.Protocol.Internal.Types.DefinitionRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.ReferenceParams
+  ,''Language.LSP.Protocol.Internal.Types.ReferenceRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.DocumentHighlightParams
+  ,''Language.LSP.Protocol.Internal.Types.DocumentHighlight
+  ,''Language.LSP.Protocol.Internal.Types.DocumentHighlightRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.DocumentSymbolParams
+  ,''Language.LSP.Protocol.Internal.Types.SymbolInformation
+  ,''Language.LSP.Protocol.Internal.Types.DocumentSymbol
+  ,''Language.LSP.Protocol.Internal.Types.DocumentSymbolRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.CodeActionParams
+  ,''Language.LSP.Protocol.Internal.Types.Command
+  ,''Language.LSP.Protocol.Internal.Types.CodeAction
+  ,''Language.LSP.Protocol.Internal.Types.CodeActionRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.WorkspaceSymbolParams
+  ,''Language.LSP.Protocol.Internal.Types.WorkspaceSymbol
+  ,''Language.LSP.Protocol.Internal.Types.WorkspaceSymbolRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.CodeLensParams
+  ,''Language.LSP.Protocol.Internal.Types.CodeLens
+  ,''Language.LSP.Protocol.Internal.Types.CodeLensRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.DocumentLinkParams
+  ,''Language.LSP.Protocol.Internal.Types.DocumentLink
+  ,''Language.LSP.Protocol.Internal.Types.DocumentLinkRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.DocumentFormattingParams
+  ,''Language.LSP.Protocol.Internal.Types.DocumentFormattingRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.DocumentRangeFormattingParams
+  ,''Language.LSP.Protocol.Internal.Types.DocumentRangeFormattingRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.DocumentOnTypeFormattingParams
+  ,''Language.LSP.Protocol.Internal.Types.DocumentOnTypeFormattingRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.RenameParams
+  ,''Language.LSP.Protocol.Internal.Types.RenameRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.PrepareRenameParams
+  ,''Language.LSP.Protocol.Internal.Types.ExecuteCommandParams
+  ,''Language.LSP.Protocol.Internal.Types.ExecuteCommandRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.ApplyWorkspaceEditParams
+  ,''Language.LSP.Protocol.Internal.Types.ApplyWorkspaceEditResult
+  ,''Language.LSP.Protocol.Internal.Types.WorkDoneProgressBegin
+  ,''Language.LSP.Protocol.Internal.Types.WorkDoneProgressReport
+  ,''Language.LSP.Protocol.Internal.Types.WorkDoneProgressEnd
+  ,''Language.LSP.Protocol.Internal.Types.SetTraceParams
+  ,''Language.LSP.Protocol.Internal.Types.LogTraceParams
+  ,''Language.LSP.Protocol.Internal.Types.CancelParams
+  ,''Language.LSP.Protocol.Internal.Types.ProgressParams
+  ,''Language.LSP.Protocol.Internal.Types.TextDocumentPositionParams
+  ,''Language.LSP.Protocol.Internal.Types.WorkDoneProgressParams
+  ,''Language.LSP.Protocol.Internal.Types.PartialResultParams
+  ,''Language.LSP.Protocol.Internal.Types.LocationLink
+  ,''Language.LSP.Protocol.Internal.Types.Range
+  ,''Language.LSP.Protocol.Internal.Types.ImplementationOptions
+  ,''Language.LSP.Protocol.Internal.Types.StaticRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.TypeDefinitionOptions
+  ,''Language.LSP.Protocol.Internal.Types.WorkspaceFoldersChangeEvent
+  ,''Language.LSP.Protocol.Internal.Types.ConfigurationItem
+  ,''Language.LSP.Protocol.Internal.Types.TextDocumentIdentifier
+  ,''Language.LSP.Protocol.Internal.Types.Color
+  ,''Language.LSP.Protocol.Internal.Types.DocumentColorOptions
+  ,''Language.LSP.Protocol.Internal.Types.FoldingRangeOptions
+  ,''Language.LSP.Protocol.Internal.Types.DeclarationOptions
+  ,''Language.LSP.Protocol.Internal.Types.Position
+  ,''Language.LSP.Protocol.Internal.Types.SelectionRangeOptions
+  ,''Language.LSP.Protocol.Internal.Types.CallHierarchyOptions
+  ,''Language.LSP.Protocol.Internal.Types.SemanticTokensOptions
+  ,''Language.LSP.Protocol.Internal.Types.SemanticTokensEdit
+  ,''Language.LSP.Protocol.Internal.Types.LinkedEditingRangeOptions
+  ,''Language.LSP.Protocol.Internal.Types.FileCreate
+  ,''Language.LSP.Protocol.Internal.Types.TextDocumentEdit
+  ,''Language.LSP.Protocol.Internal.Types.CreateFile
+  ,''Language.LSP.Protocol.Internal.Types.RenameFile
+  ,''Language.LSP.Protocol.Internal.Types.DeleteFile
+  ,''Language.LSP.Protocol.Internal.Types.ChangeAnnotation
+  ,''Language.LSP.Protocol.Internal.Types.FileOperationFilter
+  ,''Language.LSP.Protocol.Internal.Types.FileRename
+  ,''Language.LSP.Protocol.Internal.Types.FileDelete
+  ,''Language.LSP.Protocol.Internal.Types.MonikerOptions
+  ,''Language.LSP.Protocol.Internal.Types.TypeHierarchyOptions
+  ,''Language.LSP.Protocol.Internal.Types.InlineValueContext
+  ,''Language.LSP.Protocol.Internal.Types.InlineValueText
+  ,''Language.LSP.Protocol.Internal.Types.InlineValueVariableLookup
+  ,''Language.LSP.Protocol.Internal.Types.InlineValueEvaluatableExpression
+  ,''Language.LSP.Protocol.Internal.Types.InlineValueOptions
+  ,''Language.LSP.Protocol.Internal.Types.InlayHintLabelPart
+  ,''Language.LSP.Protocol.Internal.Types.MarkupContent
+  ,''Language.LSP.Protocol.Internal.Types.InlayHintOptions
+  ,''Language.LSP.Protocol.Internal.Types.RelatedFullDocumentDiagnosticReport
+  ,''Language.LSP.Protocol.Internal.Types.RelatedUnchangedDocumentDiagnosticReport
+  ,''Language.LSP.Protocol.Internal.Types.FullDocumentDiagnosticReport
+  ,''Language.LSP.Protocol.Internal.Types.UnchangedDocumentDiagnosticReport
+  ,''Language.LSP.Protocol.Internal.Types.DiagnosticOptions
+  ,''Language.LSP.Protocol.Internal.Types.PreviousResultId
+  ,''Language.LSP.Protocol.Internal.Types.NotebookDocument
+  ,''Language.LSP.Protocol.Internal.Types.TextDocumentItem
+  ,''Language.LSP.Protocol.Internal.Types.VersionedNotebookDocumentIdentifier
+  ,''Language.LSP.Protocol.Internal.Types.NotebookDocumentChangeEvent
+  ,''Language.LSP.Protocol.Internal.Types.NotebookDocumentIdentifier
+  ,''Language.LSP.Protocol.Internal.Types.Registration
+  ,''Language.LSP.Protocol.Internal.Types.Unregistration
+  ,''Language.LSP.Protocol.Internal.Types.UInitializeParams
+  ,''Language.LSP.Protocol.Internal.Types.WorkspaceFoldersInitializeParams
+  ,''Language.LSP.Protocol.Internal.Types.ServerCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.VersionedTextDocumentIdentifier
+  ,''Language.LSP.Protocol.Internal.Types.SaveOptions
+  ,''Language.LSP.Protocol.Internal.Types.FileEvent
+  ,''Language.LSP.Protocol.Internal.Types.FileSystemWatcher
+  ,''Language.LSP.Protocol.Internal.Types.Diagnostic
+  ,''Language.LSP.Protocol.Internal.Types.CompletionContext
+  ,''Language.LSP.Protocol.Internal.Types.CompletionItemLabelDetails
+  ,''Language.LSP.Protocol.Internal.Types.InsertReplaceEdit
+  ,''Language.LSP.Protocol.Internal.Types.CompletionOptions
+  ,''Language.LSP.Protocol.Internal.Types.HoverOptions
+  ,''Language.LSP.Protocol.Internal.Types.SignatureHelpContext
+  ,''Language.LSP.Protocol.Internal.Types.SignatureInformation
+  ,''Language.LSP.Protocol.Internal.Types.SignatureHelpOptions
+  ,''Language.LSP.Protocol.Internal.Types.DefinitionOptions
+  ,''Language.LSP.Protocol.Internal.Types.ReferenceContext
+  ,''Language.LSP.Protocol.Internal.Types.ReferenceOptions
+  ,''Language.LSP.Protocol.Internal.Types.DocumentHighlightOptions
+  ,''Language.LSP.Protocol.Internal.Types.BaseSymbolInformation
+  ,''Language.LSP.Protocol.Internal.Types.DocumentSymbolOptions
+  ,''Language.LSP.Protocol.Internal.Types.CodeActionContext
+  ,''Language.LSP.Protocol.Internal.Types.CodeActionOptions
+  ,''Language.LSP.Protocol.Internal.Types.WorkspaceSymbolOptions
+  ,''Language.LSP.Protocol.Internal.Types.CodeLensOptions
+  ,''Language.LSP.Protocol.Internal.Types.DocumentLinkOptions
+  ,''Language.LSP.Protocol.Internal.Types.FormattingOptions
+  ,''Language.LSP.Protocol.Internal.Types.DocumentFormattingOptions
+  ,''Language.LSP.Protocol.Internal.Types.DocumentRangeFormattingOptions
+  ,''Language.LSP.Protocol.Internal.Types.DocumentOnTypeFormattingOptions
+  ,''Language.LSP.Protocol.Internal.Types.RenameOptions
+  ,''Language.LSP.Protocol.Internal.Types.ExecuteCommandOptions
+  ,''Language.LSP.Protocol.Internal.Types.SemanticTokensLegend
+  ,''Language.LSP.Protocol.Internal.Types.OptionalVersionedTextDocumentIdentifier
+  ,''Language.LSP.Protocol.Internal.Types.AnnotatedTextEdit
+  ,''Language.LSP.Protocol.Internal.Types.ResourceOperation
+  ,''Language.LSP.Protocol.Internal.Types.CreateFileOptions
+  ,''Language.LSP.Protocol.Internal.Types.RenameFileOptions
+  ,''Language.LSP.Protocol.Internal.Types.DeleteFileOptions
+  ,''Language.LSP.Protocol.Internal.Types.FileOperationPattern
+  ,''Language.LSP.Protocol.Internal.Types.WorkspaceFullDocumentDiagnosticReport
+  ,''Language.LSP.Protocol.Internal.Types.WorkspaceUnchangedDocumentDiagnosticReport
+  ,''Language.LSP.Protocol.Internal.Types.NotebookCell
+  ,''Language.LSP.Protocol.Internal.Types.NotebookCellArrayChange
+  ,''Language.LSP.Protocol.Internal.Types.ClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.TextDocumentSyncOptions
+  ,''Language.LSP.Protocol.Internal.Types.NotebookDocumentSyncOptions
+  ,''Language.LSP.Protocol.Internal.Types.NotebookDocumentSyncRegistrationOptions
+  ,''Language.LSP.Protocol.Internal.Types.WorkspaceFoldersServerCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.FileOperationOptions
+  ,''Language.LSP.Protocol.Internal.Types.CodeDescription
+  ,''Language.LSP.Protocol.Internal.Types.DiagnosticRelatedInformation
+  ,''Language.LSP.Protocol.Internal.Types.ParameterInformation
+  ,''Language.LSP.Protocol.Internal.Types.NotebookCellTextDocumentFilter
+  ,''Language.LSP.Protocol.Internal.Types.FileOperationPatternOptions
+  ,''Language.LSP.Protocol.Internal.Types.ExecutionSummary
+  ,''Language.LSP.Protocol.Internal.Types.WorkspaceClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.TextDocumentClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.NotebookDocumentClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.WindowClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.GeneralClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.RelativePattern
+  ,''Language.LSP.Protocol.Internal.Types.WorkspaceEditClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.DidChangeConfigurationClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.DidChangeWatchedFilesClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.WorkspaceSymbolClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.ExecuteCommandClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.SemanticTokensWorkspaceClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.CodeLensWorkspaceClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.FileOperationClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.InlineValueWorkspaceClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.InlayHintWorkspaceClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.DiagnosticWorkspaceClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.TextDocumentSyncClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.CompletionClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.HoverClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.SignatureHelpClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.DeclarationClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.DefinitionClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.TypeDefinitionClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.ImplementationClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.ReferenceClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.DocumentHighlightClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.DocumentSymbolClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.CodeActionClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.CodeLensClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.DocumentLinkClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.DocumentColorClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.DocumentFormattingClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.DocumentRangeFormattingClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.DocumentOnTypeFormattingClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.RenameClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.FoldingRangeClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.SelectionRangeClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.PublishDiagnosticsClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.CallHierarchyClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.SemanticTokensClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.LinkedEditingRangeClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.MonikerClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.TypeHierarchyClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.InlineValueClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.InlayHintClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.DiagnosticClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.NotebookDocumentSyncClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.ShowMessageRequestClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.ShowDocumentClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.RegularExpressionsClientCapabilities
+  ,''Language.LSP.Protocol.Internal.Types.MarkdownClientCapabilities]
+aliasNames :: [TH.Name]
+aliasNames = [''Language.LSP.Protocol.Internal.Types.Definition
+  ,''Language.LSP.Protocol.Internal.Types.DefinitionLink
+  ,''Language.LSP.Protocol.Internal.Types.Declaration
+  ,''Language.LSP.Protocol.Internal.Types.DeclarationLink
+  ,''Language.LSP.Protocol.Internal.Types.InlineValue
+  ,''Language.LSP.Protocol.Internal.Types.DocumentDiagnosticReport
+  ,''Language.LSP.Protocol.Internal.Types.PrepareRenameResult
+  ,''Language.LSP.Protocol.Internal.Types.DocumentSelector
+  ,''Language.LSP.Protocol.Internal.Types.ProgressToken
+  ,''Language.LSP.Protocol.Internal.Types.ChangeAnnotationIdentifier
+  ,''Language.LSP.Protocol.Internal.Types.WorkspaceDocumentDiagnosticReport
+  ,''Language.LSP.Protocol.Internal.Types.TextDocumentContentChangeEvent
+  ,''Language.LSP.Protocol.Internal.Types.MarkedString
+  ,''Language.LSP.Protocol.Internal.Types.DocumentFilter
+  ,''Language.LSP.Protocol.Internal.Types.GlobPattern
+  ,''Language.LSP.Protocol.Internal.Types.TextDocumentFilter
+  ,''Language.LSP.Protocol.Internal.Types.NotebookDocumentFilter
+  ,''Language.LSP.Protocol.Internal.Types.Pattern]
+enumNames :: [TH.Name]
+enumNames = [''Language.LSP.Protocol.Internal.Types.SemanticTokenTypes
+  ,''Language.LSP.Protocol.Internal.Types.SemanticTokenModifiers
+  ,''Language.LSP.Protocol.Internal.Types.DocumentDiagnosticReportKind
+  ,''Language.LSP.Protocol.Internal.Types.ErrorCodes
+  ,''Language.LSP.Protocol.Internal.Types.LSPErrorCodes
+  ,''Language.LSP.Protocol.Internal.Types.FoldingRangeKind
+  ,''Language.LSP.Protocol.Internal.Types.SymbolKind
+  ,''Language.LSP.Protocol.Internal.Types.SymbolTag
+  ,''Language.LSP.Protocol.Internal.Types.UniquenessLevel
+  ,''Language.LSP.Protocol.Internal.Types.MonikerKind
+  ,''Language.LSP.Protocol.Internal.Types.InlayHintKind
+  ,''Language.LSP.Protocol.Internal.Types.MessageType
+  ,''Language.LSP.Protocol.Internal.Types.TextDocumentSyncKind
+  ,''Language.LSP.Protocol.Internal.Types.TextDocumentSaveReason
+  ,''Language.LSP.Protocol.Internal.Types.CompletionItemKind
+  ,''Language.LSP.Protocol.Internal.Types.CompletionItemTag
+  ,''Language.LSP.Protocol.Internal.Types.InsertTextFormat
+  ,''Language.LSP.Protocol.Internal.Types.InsertTextMode
+  ,''Language.LSP.Protocol.Internal.Types.DocumentHighlightKind
+  ,''Language.LSP.Protocol.Internal.Types.CodeActionKind
+  ,''Language.LSP.Protocol.Internal.Types.TraceValues
+  ,''Language.LSP.Protocol.Internal.Types.MarkupKind
+  ,''Language.LSP.Protocol.Internal.Types.PositionEncodingKind
+  ,''Language.LSP.Protocol.Internal.Types.FileChangeType
+  ,''Language.LSP.Protocol.Internal.Types.WatchKind
+  ,''Language.LSP.Protocol.Internal.Types.DiagnosticSeverity
+  ,''Language.LSP.Protocol.Internal.Types.DiagnosticTag
+  ,''Language.LSP.Protocol.Internal.Types.CompletionTriggerKind
+  ,''Language.LSP.Protocol.Internal.Types.SignatureHelpTriggerKind
+  ,''Language.LSP.Protocol.Internal.Types.CodeActionTriggerKind
+  ,''Language.LSP.Protocol.Internal.Types.FileOperationPatternKind
+  ,''Language.LSP.Protocol.Internal.Types.NotebookCellKind
+  ,''Language.LSP.Protocol.Internal.Types.ResourceOperationKind
+  ,''Language.LSP.Protocol.Internal.Types.FailureHandlingKind
+  ,''Language.LSP.Protocol.Internal.Types.PrepareSupportDefaultBehavior
+  ,''Language.LSP.Protocol.Internal.Types.TokenFormat]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ApplyWorkspaceEditParams.hs b/generated/Language/LSP/Protocol/Internal/Types/ApplyWorkspaceEditParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ApplyWorkspaceEditParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ApplyWorkspaceEditParams.hs
@@ -43,4 +43,4 @@
     ,["edit" Aeson..= arg1]]
 
 instance Aeson.FromJSON ApplyWorkspaceEditParams where
-  parseJSON = Aeson.withObject "ApplyWorkspaceEditParams" $ \arg -> ApplyWorkspaceEditParams <$> arg Aeson..:! "label" <*> arg Aeson..: "edit"
+  parseJSON = Aeson.withObject "ApplyWorkspaceEditParams" $ \arg -> ApplyWorkspaceEditParams <$> arg Language.LSP.Protocol.Types.Common..:!? "label" <*> arg Aeson..: "edit"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ApplyWorkspaceEditResult.hs b/generated/Language/LSP/Protocol/Internal/Types/ApplyWorkspaceEditResult.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ApplyWorkspaceEditResult.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ApplyWorkspaceEditResult.hs
@@ -51,4 +51,4 @@
     ,"failedChange" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON ApplyWorkspaceEditResult where
-  parseJSON = Aeson.withObject "ApplyWorkspaceEditResult" $ \arg -> ApplyWorkspaceEditResult <$> arg Aeson..: "applied" <*> arg Aeson..:! "failureReason" <*> arg Aeson..:! "failedChange"
+  parseJSON = Aeson.withObject "ApplyWorkspaceEditResult" $ \arg -> ApplyWorkspaceEditResult <$> arg Aeson..: "applied" <*> arg Language.LSP.Protocol.Types.Common..:!? "failureReason" <*> arg Language.LSP.Protocol.Types.Common..:!? "failedChange"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/BaseSymbolInformation.hs b/generated/Language/LSP/Protocol/Internal/Types/BaseSymbolInformation.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/BaseSymbolInformation.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/BaseSymbolInformation.hs
@@ -57,4 +57,4 @@
     ,"containerName" Language.LSP.Protocol.Types.Common..=? arg3]
 
 instance Aeson.FromJSON BaseSymbolInformation where
-  parseJSON = Aeson.withObject "BaseSymbolInformation" $ \arg -> BaseSymbolInformation <$> arg Aeson..: "name" <*> arg Aeson..: "kind" <*> arg Aeson..:! "tags" <*> arg Aeson..:! "containerName"
+  parseJSON = Aeson.withObject "BaseSymbolInformation" $ \arg -> BaseSymbolInformation <$> arg Aeson..: "name" <*> arg Aeson..: "kind" <*> arg Language.LSP.Protocol.Types.Common..:!? "tags" <*> arg Language.LSP.Protocol.Types.Common..:!? "containerName"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyClientCapabilities.hs
@@ -36,4 +36,4 @@
   toJSON (CallHierarchyClientCapabilities arg0) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON CallHierarchyClientCapabilities where
-  parseJSON = Aeson.withObject "CallHierarchyClientCapabilities" $ \arg -> CallHierarchyClientCapabilities <$> arg Aeson..:! "dynamicRegistration"
+  parseJSON = Aeson.withObject "CallHierarchyClientCapabilities" $ \arg -> CallHierarchyClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyIncomingCallsParams.hs b/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyIncomingCallsParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyIncomingCallsParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyIncomingCallsParams.hs
@@ -49,4 +49,4 @@
     ,["item" Aeson..= arg2]]
 
 instance Aeson.FromJSON CallHierarchyIncomingCallsParams where
-  parseJSON = Aeson.withObject "CallHierarchyIncomingCallsParams" $ \arg -> CallHierarchyIncomingCallsParams <$> arg Aeson..:! "workDoneToken" <*> arg Aeson..:! "partialResultToken" <*> arg Aeson..: "item"
+  parseJSON = Aeson.withObject "CallHierarchyIncomingCallsParams" $ \arg -> CallHierarchyIncomingCallsParams <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Language.LSP.Protocol.Types.Common..:!? "partialResultToken" <*> arg Aeson..: "item"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyItem.hs b/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyItem.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyItem.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyItem.hs
@@ -80,4 +80,4 @@
     ,"data" Language.LSP.Protocol.Types.Common..=? arg7]
 
 instance Aeson.FromJSON CallHierarchyItem where
-  parseJSON = Aeson.withObject "CallHierarchyItem" $ \arg -> CallHierarchyItem <$> arg Aeson..: "name" <*> arg Aeson..: "kind" <*> arg Aeson..:! "tags" <*> arg Aeson..:! "detail" <*> arg Aeson..: "uri" <*> arg Aeson..: "range" <*> arg Aeson..: "selectionRange" <*> arg Aeson..:! "data"
+  parseJSON = Aeson.withObject "CallHierarchyItem" $ \arg -> CallHierarchyItem <$> arg Aeson..: "name" <*> arg Aeson..: "kind" <*> arg Language.LSP.Protocol.Types.Common..:!? "tags" <*> arg Language.LSP.Protocol.Types.Common..:!? "detail" <*> arg Aeson..: "uri" <*> arg Aeson..: "range" <*> arg Aeson..: "selectionRange" <*> arg Language.LSP.Protocol.Types.Common..:!? "data"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyOptions.hs
@@ -36,4 +36,4 @@
   toJSON (CallHierarchyOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON CallHierarchyOptions where
-  parseJSON = Aeson.withObject "CallHierarchyOptions" $ \arg -> CallHierarchyOptions <$> arg Aeson..:! "workDoneProgress"
+  parseJSON = Aeson.withObject "CallHierarchyOptions" $ \arg -> CallHierarchyOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyOutgoingCallsParams.hs b/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyOutgoingCallsParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyOutgoingCallsParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyOutgoingCallsParams.hs
@@ -49,4 +49,4 @@
     ,["item" Aeson..= arg2]]
 
 instance Aeson.FromJSON CallHierarchyOutgoingCallsParams where
-  parseJSON = Aeson.withObject "CallHierarchyOutgoingCallsParams" $ \arg -> CallHierarchyOutgoingCallsParams <$> arg Aeson..:! "workDoneToken" <*> arg Aeson..:! "partialResultToken" <*> arg Aeson..: "item"
+  parseJSON = Aeson.withObject "CallHierarchyOutgoingCallsParams" $ \arg -> CallHierarchyOutgoingCallsParams <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Language.LSP.Protocol.Types.Common..:!? "partialResultToken" <*> arg Aeson..: "item"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyPrepareParams.hs b/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyPrepareParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyPrepareParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyPrepareParams.hs
@@ -49,4 +49,4 @@
     ,"workDoneToken" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON CallHierarchyPrepareParams where
-  parseJSON = Aeson.withObject "CallHierarchyPrepareParams" $ \arg -> CallHierarchyPrepareParams <$> arg Aeson..: "textDocument" <*> arg Aeson..: "position" <*> arg Aeson..:! "workDoneToken"
+  parseJSON = Aeson.withObject "CallHierarchyPrepareParams" $ \arg -> CallHierarchyPrepareParams <$> arg Aeson..: "textDocument" <*> arg Aeson..: "position" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyRegistrationOptions.hs
@@ -50,4 +50,4 @@
     ,"id" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON CallHierarchyRegistrationOptions where
-  parseJSON = Aeson.withObject "CallHierarchyRegistrationOptions" $ \arg -> CallHierarchyRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Aeson..:! "workDoneProgress" <*> arg Aeson..:! "id"
+  parseJSON = Aeson.withObject "CallHierarchyRegistrationOptions" $ \arg -> CallHierarchyRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Language.LSP.Protocol.Types.Common..:!? "id"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ChangeAnnotation.hs b/generated/Language/LSP/Protocol/Internal/Types/ChangeAnnotation.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ChangeAnnotation.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ChangeAnnotation.hs
@@ -50,4 +50,4 @@
     ,"description" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON ChangeAnnotation where
-  parseJSON = Aeson.withObject "ChangeAnnotation" $ \arg -> ChangeAnnotation <$> arg Aeson..: "label" <*> arg Aeson..:! "needsConfirmation" <*> arg Aeson..:! "description"
+  parseJSON = Aeson.withObject "ChangeAnnotation" $ \arg -> ChangeAnnotation <$> arg Aeson..: "label" <*> arg Language.LSP.Protocol.Types.Common..:!? "needsConfirmation" <*> arg Language.LSP.Protocol.Types.Common..:!? "description"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/ClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ClientCapabilities.hs
@@ -69,4 +69,4 @@
     ,"experimental" Language.LSP.Protocol.Types.Common..=? arg5]
 
 instance Aeson.FromJSON ClientCapabilities where
-  parseJSON = Aeson.withObject "ClientCapabilities" $ \arg -> ClientCapabilities <$> arg Aeson..:! "workspace" <*> arg Aeson..:! "textDocument" <*> arg Aeson..:! "notebookDocument" <*> arg Aeson..:! "window" <*> arg Aeson..:! "general" <*> arg Aeson..:! "experimental"
+  parseJSON = Aeson.withObject "ClientCapabilities" $ \arg -> ClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "workspace" <*> arg Language.LSP.Protocol.Types.Common..:!? "textDocument" <*> arg Language.LSP.Protocol.Types.Common..:!? "notebookDocument" <*> arg Language.LSP.Protocol.Types.Common..:!? "window" <*> arg Language.LSP.Protocol.Types.Common..:!? "general" <*> arg Language.LSP.Protocol.Types.Common..:!? "experimental"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CodeAction.hs b/generated/Language/LSP/Protocol/Internal/Types/CodeAction.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CodeAction.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CodeAction.hs
@@ -106,4 +106,4 @@
     ,"data" Language.LSP.Protocol.Types.Common..=? arg7]
 
 instance Aeson.FromJSON CodeAction where
-  parseJSON = Aeson.withObject "CodeAction" $ \arg -> CodeAction <$> arg Aeson..: "title" <*> arg Aeson..:! "kind" <*> arg Aeson..:! "diagnostics" <*> arg Aeson..:! "isPreferred" <*> arg Aeson..:! "disabled" <*> arg Aeson..:! "edit" <*> arg Aeson..:! "command" <*> arg Aeson..:! "data"
+  parseJSON = Aeson.withObject "CodeAction" $ \arg -> CodeAction <$> arg Aeson..: "title" <*> arg Language.LSP.Protocol.Types.Common..:!? "kind" <*> arg Language.LSP.Protocol.Types.Common..:!? "diagnostics" <*> arg Language.LSP.Protocol.Types.Common..:!? "isPreferred" <*> arg Language.LSP.Protocol.Types.Common..:!? "disabled" <*> arg Language.LSP.Protocol.Types.Common..:!? "edit" <*> arg Language.LSP.Protocol.Types.Common..:!? "command" <*> arg Language.LSP.Protocol.Types.Common..:!? "data"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CodeActionClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/CodeActionClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CodeActionClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CodeActionClientCapabilities.hs
@@ -88,4 +88,4 @@
     ,"honorsChangeAnnotations" Language.LSP.Protocol.Types.Common..=? arg6]
 
 instance Aeson.FromJSON CodeActionClientCapabilities where
-  parseJSON = Aeson.withObject "CodeActionClientCapabilities" $ \arg -> CodeActionClientCapabilities <$> arg Aeson..:! "dynamicRegistration" <*> arg Aeson..:! "codeActionLiteralSupport" <*> arg Aeson..:! "isPreferredSupport" <*> arg Aeson..:! "disabledSupport" <*> arg Aeson..:! "dataSupport" <*> arg Aeson..:! "resolveSupport" <*> arg Aeson..:! "honorsChangeAnnotations"
+  parseJSON = Aeson.withObject "CodeActionClientCapabilities" $ \arg -> CodeActionClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration" <*> arg Language.LSP.Protocol.Types.Common..:!? "codeActionLiteralSupport" <*> arg Language.LSP.Protocol.Types.Common..:!? "isPreferredSupport" <*> arg Language.LSP.Protocol.Types.Common..:!? "disabledSupport" <*> arg Language.LSP.Protocol.Types.Common..:!? "dataSupport" <*> arg Language.LSP.Protocol.Types.Common..:!? "resolveSupport" <*> arg Language.LSP.Protocol.Types.Common..:!? "honorsChangeAnnotations"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CodeActionContext.hs b/generated/Language/LSP/Protocol/Internal/Types/CodeActionContext.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CodeActionContext.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CodeActionContext.hs
@@ -57,4 +57,4 @@
     ,"triggerKind" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON CodeActionContext where
-  parseJSON = Aeson.withObject "CodeActionContext" $ \arg -> CodeActionContext <$> arg Aeson..: "diagnostics" <*> arg Aeson..:! "only" <*> arg Aeson..:! "triggerKind"
+  parseJSON = Aeson.withObject "CodeActionContext" $ \arg -> CodeActionContext <$> arg Aeson..: "diagnostics" <*> arg Language.LSP.Protocol.Types.Common..:!? "only" <*> arg Language.LSP.Protocol.Types.Common..:!? "triggerKind"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CodeActionKind.hs b/generated/Language/LSP/Protocol/Internal/Types/CodeActionKind.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CodeActionKind.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CodeActionKind.hs
@@ -96,7 +96,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON
-  , Data.String.IsString ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum CodeActionKind Data.Text.Text)
+  , Data.String.IsString ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum CodeActionKind)
   deriving Pretty via (ViaJSON CodeActionKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum CodeActionKind where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CodeActionOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/CodeActionOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CodeActionOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CodeActionOptions.hs
@@ -51,4 +51,4 @@
     ,"resolveProvider" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON CodeActionOptions where
-  parseJSON = Aeson.withObject "CodeActionOptions" $ \arg -> CodeActionOptions <$> arg Aeson..:! "workDoneProgress" <*> arg Aeson..:! "codeActionKinds" <*> arg Aeson..:! "resolveProvider"
+  parseJSON = Aeson.withObject "CodeActionOptions" $ \arg -> CodeActionOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Language.LSP.Protocol.Types.Common..:!? "codeActionKinds" <*> arg Language.LSP.Protocol.Types.Common..:!? "resolveProvider"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CodeActionParams.hs b/generated/Language/LSP/Protocol/Internal/Types/CodeActionParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CodeActionParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CodeActionParams.hs
@@ -59,4 +59,4 @@
     ,["context" Aeson..= arg4]]
 
 instance Aeson.FromJSON CodeActionParams where
-  parseJSON = Aeson.withObject "CodeActionParams" $ \arg -> CodeActionParams <$> arg Aeson..:! "workDoneToken" <*> arg Aeson..:! "partialResultToken" <*> arg Aeson..: "textDocument" <*> arg Aeson..: "range" <*> arg Aeson..: "context"
+  parseJSON = Aeson.withObject "CodeActionParams" $ \arg -> CodeActionParams <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Language.LSP.Protocol.Types.Common..:!? "partialResultToken" <*> arg Aeson..: "textDocument" <*> arg Aeson..: "range" <*> arg Aeson..: "context"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CodeActionRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/CodeActionRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CodeActionRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CodeActionRegistrationOptions.hs
@@ -58,4 +58,4 @@
     ,"resolveProvider" Language.LSP.Protocol.Types.Common..=? arg3]
 
 instance Aeson.FromJSON CodeActionRegistrationOptions where
-  parseJSON = Aeson.withObject "CodeActionRegistrationOptions" $ \arg -> CodeActionRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Aeson..:! "workDoneProgress" <*> arg Aeson..:! "codeActionKinds" <*> arg Aeson..:! "resolveProvider"
+  parseJSON = Aeson.withObject "CodeActionRegistrationOptions" $ \arg -> CodeActionRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Language.LSP.Protocol.Types.Common..:!? "codeActionKinds" <*> arg Language.LSP.Protocol.Types.Common..:!? "resolveProvider"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CodeActionTriggerKind.hs b/generated/Language/LSP/Protocol/Internal/Types/CodeActionTriggerKind.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CodeActionTriggerKind.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CodeActionTriggerKind.hs
@@ -40,7 +40,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum CodeActionTriggerKind Language.LSP.Protocol.Types.Common.UInt)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum CodeActionTriggerKind)
   deriving Pretty via (ViaJSON CodeActionTriggerKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum CodeActionTriggerKind where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CodeLens.hs b/generated/Language/LSP/Protocol/Internal/Types/CodeLens.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CodeLens.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CodeLens.hs
@@ -52,4 +52,4 @@
     ,"data" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON CodeLens where
-  parseJSON = Aeson.withObject "CodeLens" $ \arg -> CodeLens <$> arg Aeson..: "range" <*> arg Aeson..:! "command" <*> arg Aeson..:! "data"
+  parseJSON = Aeson.withObject "CodeLens" $ \arg -> CodeLens <$> arg Aeson..: "range" <*> arg Language.LSP.Protocol.Types.Common..:!? "command" <*> arg Language.LSP.Protocol.Types.Common..:!? "data"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CodeLensClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/CodeLensClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CodeLensClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CodeLensClientCapabilities.hs
@@ -34,4 +34,4 @@
   toJSON (CodeLensClientCapabilities arg0) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON CodeLensClientCapabilities where
-  parseJSON = Aeson.withObject "CodeLensClientCapabilities" $ \arg -> CodeLensClientCapabilities <$> arg Aeson..:! "dynamicRegistration"
+  parseJSON = Aeson.withObject "CodeLensClientCapabilities" $ \arg -> CodeLensClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CodeLensOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/CodeLensOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CodeLensOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CodeLensOptions.hs
@@ -39,4 +39,4 @@
     ,"resolveProvider" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON CodeLensOptions where
-  parseJSON = Aeson.withObject "CodeLensOptions" $ \arg -> CodeLensOptions <$> arg Aeson..:! "workDoneProgress" <*> arg Aeson..:! "resolveProvider"
+  parseJSON = Aeson.withObject "CodeLensOptions" $ \arg -> CodeLensOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Language.LSP.Protocol.Types.Common..:!? "resolveProvider"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CodeLensParams.hs b/generated/Language/LSP/Protocol/Internal/Types/CodeLensParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CodeLensParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CodeLensParams.hs
@@ -47,4 +47,4 @@
     ,["textDocument" Aeson..= arg2]]
 
 instance Aeson.FromJSON CodeLensParams where
-  parseJSON = Aeson.withObject "CodeLensParams" $ \arg -> CodeLensParams <$> arg Aeson..:! "workDoneToken" <*> arg Aeson..:! "partialResultToken" <*> arg Aeson..: "textDocument"
+  parseJSON = Aeson.withObject "CodeLensParams" $ \arg -> CodeLensParams <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Language.LSP.Protocol.Types.Common..:!? "partialResultToken" <*> arg Aeson..: "textDocument"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CodeLensRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/CodeLensRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CodeLensRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CodeLensRegistrationOptions.hs
@@ -46,4 +46,4 @@
     ,"resolveProvider" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON CodeLensRegistrationOptions where
-  parseJSON = Aeson.withObject "CodeLensRegistrationOptions" $ \arg -> CodeLensRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Aeson..:! "workDoneProgress" <*> arg Aeson..:! "resolveProvider"
+  parseJSON = Aeson.withObject "CodeLensRegistrationOptions" $ \arg -> CodeLensRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Language.LSP.Protocol.Types.Common..:!? "resolveProvider"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CodeLensWorkspaceClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/CodeLensWorkspaceClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CodeLensWorkspaceClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CodeLensWorkspaceClientCapabilities.hs
@@ -40,4 +40,4 @@
   toJSON (CodeLensWorkspaceClientCapabilities arg0) = Aeson.object $ concat $  ["refreshSupport" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON CodeLensWorkspaceClientCapabilities where
-  parseJSON = Aeson.withObject "CodeLensWorkspaceClientCapabilities" $ \arg -> CodeLensWorkspaceClientCapabilities <$> arg Aeson..:! "refreshSupport"
+  parseJSON = Aeson.withObject "CodeLensWorkspaceClientCapabilities" $ \arg -> CodeLensWorkspaceClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "refreshSupport"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ColorPresentation.hs b/generated/Language/LSP/Protocol/Internal/Types/ColorPresentation.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ColorPresentation.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ColorPresentation.hs
@@ -51,4 +51,4 @@
     ,"additionalTextEdits" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON ColorPresentation where
-  parseJSON = Aeson.withObject "ColorPresentation" $ \arg -> ColorPresentation <$> arg Aeson..: "label" <*> arg Aeson..:! "textEdit" <*> arg Aeson..:! "additionalTextEdits"
+  parseJSON = Aeson.withObject "ColorPresentation" $ \arg -> ColorPresentation <$> arg Aeson..: "label" <*> arg Language.LSP.Protocol.Types.Common..:!? "textEdit" <*> arg Language.LSP.Protocol.Types.Common..:!? "additionalTextEdits"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ColorPresentationParams.hs b/generated/Language/LSP/Protocol/Internal/Types/ColorPresentationParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ColorPresentationParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ColorPresentationParams.hs
@@ -59,4 +59,4 @@
     ,["range" Aeson..= arg4]]
 
 instance Aeson.FromJSON ColorPresentationParams where
-  parseJSON = Aeson.withObject "ColorPresentationParams" $ \arg -> ColorPresentationParams <$> arg Aeson..:! "workDoneToken" <*> arg Aeson..:! "partialResultToken" <*> arg Aeson..: "textDocument" <*> arg Aeson..: "color" <*> arg Aeson..: "range"
+  parseJSON = Aeson.withObject "ColorPresentationParams" $ \arg -> ColorPresentationParams <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Language.LSP.Protocol.Types.Common..:!? "partialResultToken" <*> arg Aeson..: "textDocument" <*> arg Aeson..: "color" <*> arg Aeson..: "range"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/Command.hs b/generated/Language/LSP/Protocol/Internal/Types/Command.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/Command.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/Command.hs
@@ -50,4 +50,4 @@
     ,"arguments" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON Command where
-  parseJSON = Aeson.withObject "Command" $ \arg -> Command <$> arg Aeson..: "title" <*> arg Aeson..: "command" <*> arg Aeson..:! "arguments"
+  parseJSON = Aeson.withObject "Command" $ \arg -> Command <$> arg Aeson..: "title" <*> arg Aeson..: "command" <*> arg Language.LSP.Protocol.Types.Common..:!? "arguments"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CompletionClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/CompletionClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CompletionClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CompletionClientCapabilities.hs
@@ -74,4 +74,4 @@
     ,"completionList" Language.LSP.Protocol.Types.Common..=? arg5]
 
 instance Aeson.FromJSON CompletionClientCapabilities where
-  parseJSON = Aeson.withObject "CompletionClientCapabilities" $ \arg -> CompletionClientCapabilities <$> arg Aeson..:! "dynamicRegistration" <*> arg Aeson..:! "completionItem" <*> arg Aeson..:! "completionItemKind" <*> arg Aeson..:! "insertTextMode" <*> arg Aeson..:! "contextSupport" <*> arg Aeson..:! "completionList"
+  parseJSON = Aeson.withObject "CompletionClientCapabilities" $ \arg -> CompletionClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration" <*> arg Language.LSP.Protocol.Types.Common..:!? "completionItem" <*> arg Language.LSP.Protocol.Types.Common..:!? "completionItemKind" <*> arg Language.LSP.Protocol.Types.Common..:!? "insertTextMode" <*> arg Language.LSP.Protocol.Types.Common..:!? "contextSupport" <*> arg Language.LSP.Protocol.Types.Common..:!? "completionList"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CompletionContext.hs b/generated/Language/LSP/Protocol/Internal/Types/CompletionContext.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CompletionContext.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CompletionContext.hs
@@ -42,4 +42,4 @@
     ,"triggerCharacter" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON CompletionContext where
-  parseJSON = Aeson.withObject "CompletionContext" $ \arg -> CompletionContext <$> arg Aeson..: "triggerKind" <*> arg Aeson..:! "triggerCharacter"
+  parseJSON = Aeson.withObject "CompletionContext" $ \arg -> CompletionContext <$> arg Aeson..: "triggerKind" <*> arg Language.LSP.Protocol.Types.Common..:!? "triggerCharacter"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CompletionItem.hs b/generated/Language/LSP/Protocol/Internal/Types/CompletionItem.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CompletionItem.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CompletionItem.hs
@@ -215,4 +215,4 @@
     ,"data" Language.LSP.Protocol.Types.Common..=? arg18]
 
 instance Aeson.FromJSON CompletionItem where
-  parseJSON = Aeson.withObject "CompletionItem" $ \arg -> CompletionItem <$> arg Aeson..: "label" <*> arg Aeson..:! "labelDetails" <*> arg Aeson..:! "kind" <*> arg Aeson..:! "tags" <*> arg Aeson..:! "detail" <*> arg Aeson..:! "documentation" <*> arg Aeson..:! "deprecated" <*> arg Aeson..:! "preselect" <*> arg Aeson..:! "sortText" <*> arg Aeson..:! "filterText" <*> arg Aeson..:! "insertText" <*> arg Aeson..:! "insertTextFormat" <*> arg Aeson..:! "insertTextMode" <*> arg Aeson..:! "textEdit" <*> arg Aeson..:! "textEditText" <*> arg Aeson..:! "additionalTextEdits" <*> arg Aeson..:! "commitCharacters" <*> arg Aeson..:! "command" <*> arg Aeson..:! "data"
+  parseJSON = Aeson.withObject "CompletionItem" $ \arg -> CompletionItem <$> arg Aeson..: "label" <*> arg Language.LSP.Protocol.Types.Common..:!? "labelDetails" <*> arg Language.LSP.Protocol.Types.Common..:!? "kind" <*> arg Language.LSP.Protocol.Types.Common..:!? "tags" <*> arg Language.LSP.Protocol.Types.Common..:!? "detail" <*> arg Language.LSP.Protocol.Types.Common..:!? "documentation" <*> arg Language.LSP.Protocol.Types.Common..:!? "deprecated" <*> arg Language.LSP.Protocol.Types.Common..:!? "preselect" <*> arg Language.LSP.Protocol.Types.Common..:!? "sortText" <*> arg Language.LSP.Protocol.Types.Common..:!? "filterText" <*> arg Language.LSP.Protocol.Types.Common..:!? "insertText" <*> arg Language.LSP.Protocol.Types.Common..:!? "insertTextFormat" <*> arg Language.LSP.Protocol.Types.Common..:!? "insertTextMode" <*> arg Language.LSP.Protocol.Types.Common..:!? "textEdit" <*> arg Language.LSP.Protocol.Types.Common..:!? "textEditText" <*> arg Language.LSP.Protocol.Types.Common..:!? "additionalTextEdits" <*> arg Language.LSP.Protocol.Types.Common..:!? "commitCharacters" <*> arg Language.LSP.Protocol.Types.Common..:!? "command" <*> arg Language.LSP.Protocol.Types.Common..:!? "data"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CompletionItemKind.hs b/generated/Language/LSP/Protocol/Internal/Types/CompletionItemKind.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CompletionItemKind.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CompletionItemKind.hs
@@ -127,7 +127,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum CompletionItemKind Language.LSP.Protocol.Types.Common.UInt)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum CompletionItemKind)
   deriving Pretty via (ViaJSON CompletionItemKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum CompletionItemKind where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CompletionItemLabelDetails.hs b/generated/Language/LSP/Protocol/Internal/Types/CompletionItemLabelDetails.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CompletionItemLabelDetails.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CompletionItemLabelDetails.hs
@@ -44,4 +44,4 @@
     ,"description" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON CompletionItemLabelDetails where
-  parseJSON = Aeson.withObject "CompletionItemLabelDetails" $ \arg -> CompletionItemLabelDetails <$> arg Aeson..:! "detail" <*> arg Aeson..:! "description"
+  parseJSON = Aeson.withObject "CompletionItemLabelDetails" $ \arg -> CompletionItemLabelDetails <$> arg Language.LSP.Protocol.Types.Common..:!? "detail" <*> arg Language.LSP.Protocol.Types.Common..:!? "description"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CompletionItemTag.hs b/generated/Language/LSP/Protocol/Internal/Types/CompletionItemTag.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CompletionItemTag.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CompletionItemTag.hs
@@ -34,7 +34,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum CompletionItemTag Language.LSP.Protocol.Types.Common.UInt)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum CompletionItemTag)
   deriving Pretty via (ViaJSON CompletionItemTag)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum CompletionItemTag where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CompletionList.hs b/generated/Language/LSP/Protocol/Internal/Types/CompletionList.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CompletionList.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CompletionList.hs
@@ -67,4 +67,4 @@
     ,["items" Aeson..= arg2]]
 
 instance Aeson.FromJSON CompletionList where
-  parseJSON = Aeson.withObject "CompletionList" $ \arg -> CompletionList <$> arg Aeson..: "isIncomplete" <*> arg Aeson..:! "itemDefaults" <*> arg Aeson..: "items"
+  parseJSON = Aeson.withObject "CompletionList" $ \arg -> CompletionList <$> arg Aeson..: "isIncomplete" <*> arg Language.LSP.Protocol.Types.Common..:!? "itemDefaults" <*> arg Aeson..: "items"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CompletionOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/CompletionOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CompletionOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CompletionOptions.hs
@@ -74,4 +74,4 @@
     ,"completionItem" Language.LSP.Protocol.Types.Common..=? arg4]
 
 instance Aeson.FromJSON CompletionOptions where
-  parseJSON = Aeson.withObject "CompletionOptions" $ \arg -> CompletionOptions <$> arg Aeson..:! "workDoneProgress" <*> arg Aeson..:! "triggerCharacters" <*> arg Aeson..:! "allCommitCharacters" <*> arg Aeson..:! "resolveProvider" <*> arg Aeson..:! "completionItem"
+  parseJSON = Aeson.withObject "CompletionOptions" $ \arg -> CompletionOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Language.LSP.Protocol.Types.Common..:!? "triggerCharacters" <*> arg Language.LSP.Protocol.Types.Common..:!? "allCommitCharacters" <*> arg Language.LSP.Protocol.Types.Common..:!? "resolveProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "completionItem"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CompletionParams.hs b/generated/Language/LSP/Protocol/Internal/Types/CompletionParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CompletionParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CompletionParams.hs
@@ -60,4 +60,4 @@
     ,"context" Language.LSP.Protocol.Types.Common..=? arg4]
 
 instance Aeson.FromJSON CompletionParams where
-  parseJSON = Aeson.withObject "CompletionParams" $ \arg -> CompletionParams <$> arg Aeson..: "textDocument" <*> arg Aeson..: "position" <*> arg Aeson..:! "workDoneToken" <*> arg Aeson..:! "partialResultToken" <*> arg Aeson..:! "context"
+  parseJSON = Aeson.withObject "CompletionParams" $ \arg -> CompletionParams <$> arg Aeson..: "textDocument" <*> arg Aeson..: "position" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Language.LSP.Protocol.Types.Common..:!? "partialResultToken" <*> arg Language.LSP.Protocol.Types.Common..:!? "context"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CompletionRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/CompletionRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CompletionRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CompletionRegistrationOptions.hs
@@ -81,4 +81,4 @@
     ,"completionItem" Language.LSP.Protocol.Types.Common..=? arg5]
 
 instance Aeson.FromJSON CompletionRegistrationOptions where
-  parseJSON = Aeson.withObject "CompletionRegistrationOptions" $ \arg -> CompletionRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Aeson..:! "workDoneProgress" <*> arg Aeson..:! "triggerCharacters" <*> arg Aeson..:! "allCommitCharacters" <*> arg Aeson..:! "resolveProvider" <*> arg Aeson..:! "completionItem"
+  parseJSON = Aeson.withObject "CompletionRegistrationOptions" $ \arg -> CompletionRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Language.LSP.Protocol.Types.Common..:!? "triggerCharacters" <*> arg Language.LSP.Protocol.Types.Common..:!? "allCommitCharacters" <*> arg Language.LSP.Protocol.Types.Common..:!? "resolveProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "completionItem"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CompletionTriggerKind.hs b/generated/Language/LSP/Protocol/Internal/Types/CompletionTriggerKind.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CompletionTriggerKind.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CompletionTriggerKind.hs
@@ -41,7 +41,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum CompletionTriggerKind Language.LSP.Protocol.Types.Common.UInt)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum CompletionTriggerKind)
   deriving Pretty via (ViaJSON CompletionTriggerKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum CompletionTriggerKind where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ConfigurationItem.hs b/generated/Language/LSP/Protocol/Internal/Types/ConfigurationItem.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ConfigurationItem.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ConfigurationItem.hs
@@ -40,4 +40,4 @@
     ,"section" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON ConfigurationItem where
-  parseJSON = Aeson.withObject "ConfigurationItem" $ \arg -> ConfigurationItem <$> arg Aeson..:! "scopeUri" <*> arg Aeson..:! "section"
+  parseJSON = Aeson.withObject "ConfigurationItem" $ \arg -> ConfigurationItem <$> arg Language.LSP.Protocol.Types.Common..:!? "scopeUri" <*> arg Language.LSP.Protocol.Types.Common..:!? "section"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CreateFile.hs b/generated/Language/LSP/Protocol/Internal/Types/CreateFile.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CreateFile.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CreateFile.hs
@@ -55,4 +55,4 @@
     ,"options" Language.LSP.Protocol.Types.Common..=? arg3]
 
 instance Aeson.FromJSON CreateFile where
-  parseJSON = Aeson.withObject "CreateFile" $ \arg -> CreateFile <$> arg Aeson..:! "annotationId" <*> arg Aeson..: "kind" <*> arg Aeson..: "uri" <*> arg Aeson..:! "options"
+  parseJSON = Aeson.withObject "CreateFile" $ \arg -> CreateFile <$> arg Language.LSP.Protocol.Types.Common..:!? "annotationId" <*> arg Aeson..: "kind" <*> arg Aeson..: "uri" <*> arg Language.LSP.Protocol.Types.Common..:!? "options"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CreateFileOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/CreateFileOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CreateFileOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CreateFileOptions.hs
@@ -39,4 +39,4 @@
     ,"ignoreIfExists" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON CreateFileOptions where
-  parseJSON = Aeson.withObject "CreateFileOptions" $ \arg -> CreateFileOptions <$> arg Aeson..:! "overwrite" <*> arg Aeson..:! "ignoreIfExists"
+  parseJSON = Aeson.withObject "CreateFileOptions" $ \arg -> CreateFileOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "overwrite" <*> arg Language.LSP.Protocol.Types.Common..:!? "ignoreIfExists"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DeclarationClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/DeclarationClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DeclarationClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DeclarationClientCapabilities.hs
@@ -41,4 +41,4 @@
     ,"linkSupport" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON DeclarationClientCapabilities where
-  parseJSON = Aeson.withObject "DeclarationClientCapabilities" $ \arg -> DeclarationClientCapabilities <$> arg Aeson..:! "dynamicRegistration" <*> arg Aeson..:! "linkSupport"
+  parseJSON = Aeson.withObject "DeclarationClientCapabilities" $ \arg -> DeclarationClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration" <*> arg Language.LSP.Protocol.Types.Common..:!? "linkSupport"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DeclarationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/DeclarationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DeclarationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DeclarationOptions.hs
@@ -34,4 +34,4 @@
   toJSON (DeclarationOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON DeclarationOptions where
-  parseJSON = Aeson.withObject "DeclarationOptions" $ \arg -> DeclarationOptions <$> arg Aeson..:! "workDoneProgress"
+  parseJSON = Aeson.withObject "DeclarationOptions" $ \arg -> DeclarationOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DeclarationParams.hs b/generated/Language/LSP/Protocol/Internal/Types/DeclarationParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DeclarationParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DeclarationParams.hs
@@ -53,4 +53,4 @@
     ,"partialResultToken" Language.LSP.Protocol.Types.Common..=? arg3]
 
 instance Aeson.FromJSON DeclarationParams where
-  parseJSON = Aeson.withObject "DeclarationParams" $ \arg -> DeclarationParams <$> arg Aeson..: "textDocument" <*> arg Aeson..: "position" <*> arg Aeson..:! "workDoneToken" <*> arg Aeson..:! "partialResultToken"
+  parseJSON = Aeson.withObject "DeclarationParams" $ \arg -> DeclarationParams <$> arg Aeson..: "textDocument" <*> arg Aeson..: "position" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Language.LSP.Protocol.Types.Common..:!? "partialResultToken"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DeclarationRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/DeclarationRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DeclarationRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DeclarationRegistrationOptions.hs
@@ -48,4 +48,4 @@
     ,"id" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON DeclarationRegistrationOptions where
-  parseJSON = Aeson.withObject "DeclarationRegistrationOptions" $ \arg -> DeclarationRegistrationOptions <$> arg Aeson..:! "workDoneProgress" <*> arg Aeson..: "documentSelector" <*> arg Aeson..:! "id"
+  parseJSON = Aeson.withObject "DeclarationRegistrationOptions" $ \arg -> DeclarationRegistrationOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Aeson..: "documentSelector" <*> arg Language.LSP.Protocol.Types.Common..:!? "id"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DefinitionClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/DefinitionClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DefinitionClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DefinitionClientCapabilities.hs
@@ -41,4 +41,4 @@
     ,"linkSupport" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON DefinitionClientCapabilities where
-  parseJSON = Aeson.withObject "DefinitionClientCapabilities" $ \arg -> DefinitionClientCapabilities <$> arg Aeson..:! "dynamicRegistration" <*> arg Aeson..:! "linkSupport"
+  parseJSON = Aeson.withObject "DefinitionClientCapabilities" $ \arg -> DefinitionClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration" <*> arg Language.LSP.Protocol.Types.Common..:!? "linkSupport"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DefinitionOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/DefinitionOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DefinitionOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DefinitionOptions.hs
@@ -34,4 +34,4 @@
   toJSON (DefinitionOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON DefinitionOptions where
-  parseJSON = Aeson.withObject "DefinitionOptions" $ \arg -> DefinitionOptions <$> arg Aeson..:! "workDoneProgress"
+  parseJSON = Aeson.withObject "DefinitionOptions" $ \arg -> DefinitionOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DefinitionParams.hs b/generated/Language/LSP/Protocol/Internal/Types/DefinitionParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DefinitionParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DefinitionParams.hs
@@ -53,4 +53,4 @@
     ,"partialResultToken" Language.LSP.Protocol.Types.Common..=? arg3]
 
 instance Aeson.FromJSON DefinitionParams where
-  parseJSON = Aeson.withObject "DefinitionParams" $ \arg -> DefinitionParams <$> arg Aeson..: "textDocument" <*> arg Aeson..: "position" <*> arg Aeson..:! "workDoneToken" <*> arg Aeson..:! "partialResultToken"
+  parseJSON = Aeson.withObject "DefinitionParams" $ \arg -> DefinitionParams <$> arg Aeson..: "textDocument" <*> arg Aeson..: "position" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Language.LSP.Protocol.Types.Common..:!? "partialResultToken"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DefinitionRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/DefinitionRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DefinitionRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DefinitionRegistrationOptions.hs
@@ -41,4 +41,4 @@
     ,"workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON DefinitionRegistrationOptions where
-  parseJSON = Aeson.withObject "DefinitionRegistrationOptions" $ \arg -> DefinitionRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Aeson..:! "workDoneProgress"
+  parseJSON = Aeson.withObject "DefinitionRegistrationOptions" $ \arg -> DefinitionRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DeleteFile.hs b/generated/Language/LSP/Protocol/Internal/Types/DeleteFile.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DeleteFile.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DeleteFile.hs
@@ -55,4 +55,4 @@
     ,"options" Language.LSP.Protocol.Types.Common..=? arg3]
 
 instance Aeson.FromJSON DeleteFile where
-  parseJSON = Aeson.withObject "DeleteFile" $ \arg -> DeleteFile <$> arg Aeson..:! "annotationId" <*> arg Aeson..: "kind" <*> arg Aeson..: "uri" <*> arg Aeson..:! "options"
+  parseJSON = Aeson.withObject "DeleteFile" $ \arg -> DeleteFile <$> arg Language.LSP.Protocol.Types.Common..:!? "annotationId" <*> arg Aeson..: "kind" <*> arg Aeson..: "uri" <*> arg Language.LSP.Protocol.Types.Common..:!? "options"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DeleteFileOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/DeleteFileOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DeleteFileOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DeleteFileOptions.hs
@@ -39,4 +39,4 @@
     ,"ignoreIfNotExists" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON DeleteFileOptions where
-  parseJSON = Aeson.withObject "DeleteFileOptions" $ \arg -> DeleteFileOptions <$> arg Aeson..:! "recursive" <*> arg Aeson..:! "ignoreIfNotExists"
+  parseJSON = Aeson.withObject "DeleteFileOptions" $ \arg -> DeleteFileOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "recursive" <*> arg Language.LSP.Protocol.Types.Common..:!? "ignoreIfNotExists"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/Diagnostic.hs b/generated/Language/LSP/Protocol/Internal/Types/Diagnostic.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/Diagnostic.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/Diagnostic.hs
@@ -94,4 +94,4 @@
     ,"data" Language.LSP.Protocol.Types.Common..=? arg8]
 
 instance Aeson.FromJSON Diagnostic where
-  parseJSON = Aeson.withObject "Diagnostic" $ \arg -> Diagnostic <$> arg Aeson..: "range" <*> arg Aeson..:! "severity" <*> arg Aeson..:! "code" <*> arg Aeson..:! "codeDescription" <*> arg Aeson..:! "source" <*> arg Aeson..: "message" <*> arg Aeson..:! "tags" <*> arg Aeson..:! "relatedInformation" <*> arg Aeson..:! "data"
+  parseJSON = Aeson.withObject "Diagnostic" $ \arg -> Diagnostic <$> arg Aeson..: "range" <*> arg Language.LSP.Protocol.Types.Common..:!? "severity" <*> arg Language.LSP.Protocol.Types.Common..:!? "code" <*> arg Language.LSP.Protocol.Types.Common..:!? "codeDescription" <*> arg Language.LSP.Protocol.Types.Common..:!? "source" <*> arg Aeson..: "message" <*> arg Language.LSP.Protocol.Types.Common..:!? "tags" <*> arg Language.LSP.Protocol.Types.Common..:!? "relatedInformation" <*> arg Language.LSP.Protocol.Types.Common..:!? "data"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DiagnosticClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/DiagnosticClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DiagnosticClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DiagnosticClientCapabilities.hs
@@ -43,4 +43,4 @@
     ,"relatedDocumentSupport" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON DiagnosticClientCapabilities where
-  parseJSON = Aeson.withObject "DiagnosticClientCapabilities" $ \arg -> DiagnosticClientCapabilities <$> arg Aeson..:! "dynamicRegistration" <*> arg Aeson..:! "relatedDocumentSupport"
+  parseJSON = Aeson.withObject "DiagnosticClientCapabilities" $ \arg -> DiagnosticClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration" <*> arg Language.LSP.Protocol.Types.Common..:!? "relatedDocumentSupport"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DiagnosticOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/DiagnosticOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DiagnosticOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DiagnosticOptions.hs
@@ -56,4 +56,4 @@
     ,["workspaceDiagnostics" Aeson..= arg3]]
 
 instance Aeson.FromJSON DiagnosticOptions where
-  parseJSON = Aeson.withObject "DiagnosticOptions" $ \arg -> DiagnosticOptions <$> arg Aeson..:! "workDoneProgress" <*> arg Aeson..:! "identifier" <*> arg Aeson..: "interFileDependencies" <*> arg Aeson..: "workspaceDiagnostics"
+  parseJSON = Aeson.withObject "DiagnosticOptions" $ \arg -> DiagnosticOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Language.LSP.Protocol.Types.Common..:!? "identifier" <*> arg Aeson..: "interFileDependencies" <*> arg Aeson..: "workspaceDiagnostics"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DiagnosticRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/DiagnosticRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DiagnosticRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DiagnosticRegistrationOptions.hs
@@ -69,4 +69,4 @@
     ,"id" Language.LSP.Protocol.Types.Common..=? arg5]
 
 instance Aeson.FromJSON DiagnosticRegistrationOptions where
-  parseJSON = Aeson.withObject "DiagnosticRegistrationOptions" $ \arg -> DiagnosticRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Aeson..:! "workDoneProgress" <*> arg Aeson..:! "identifier" <*> arg Aeson..: "interFileDependencies" <*> arg Aeson..: "workspaceDiagnostics" <*> arg Aeson..:! "id"
+  parseJSON = Aeson.withObject "DiagnosticRegistrationOptions" $ \arg -> DiagnosticRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Language.LSP.Protocol.Types.Common..:!? "identifier" <*> arg Aeson..: "interFileDependencies" <*> arg Aeson..: "workspaceDiagnostics" <*> arg Language.LSP.Protocol.Types.Common..:!? "id"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DiagnosticSeverity.hs b/generated/Language/LSP/Protocol/Internal/Types/DiagnosticSeverity.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DiagnosticSeverity.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DiagnosticSeverity.hs
@@ -43,7 +43,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum DiagnosticSeverity Language.LSP.Protocol.Types.Common.UInt)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum DiagnosticSeverity)
   deriving Pretty via (ViaJSON DiagnosticSeverity)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum DiagnosticSeverity where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DiagnosticTag.hs b/generated/Language/LSP/Protocol/Internal/Types/DiagnosticTag.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DiagnosticTag.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DiagnosticTag.hs
@@ -42,7 +42,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum DiagnosticTag Language.LSP.Protocol.Types.Common.UInt)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum DiagnosticTag)
   deriving Pretty via (ViaJSON DiagnosticTag)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum DiagnosticTag where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DiagnosticWorkspaceClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/DiagnosticWorkspaceClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DiagnosticWorkspaceClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DiagnosticWorkspaceClientCapabilities.hs
@@ -42,4 +42,4 @@
   toJSON (DiagnosticWorkspaceClientCapabilities arg0) = Aeson.object $ concat $  ["refreshSupport" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON DiagnosticWorkspaceClientCapabilities where
-  parseJSON = Aeson.withObject "DiagnosticWorkspaceClientCapabilities" $ \arg -> DiagnosticWorkspaceClientCapabilities <$> arg Aeson..:! "refreshSupport"
+  parseJSON = Aeson.withObject "DiagnosticWorkspaceClientCapabilities" $ \arg -> DiagnosticWorkspaceClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "refreshSupport"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DidChangeConfigurationClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/DidChangeConfigurationClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DidChangeConfigurationClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DidChangeConfigurationClientCapabilities.hs
@@ -34,4 +34,4 @@
   toJSON (DidChangeConfigurationClientCapabilities arg0) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON DidChangeConfigurationClientCapabilities where
-  parseJSON = Aeson.withObject "DidChangeConfigurationClientCapabilities" $ \arg -> DidChangeConfigurationClientCapabilities <$> arg Aeson..:! "dynamicRegistration"
+  parseJSON = Aeson.withObject "DidChangeConfigurationClientCapabilities" $ \arg -> DidChangeConfigurationClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DidChangeConfigurationRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/DidChangeConfigurationRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DidChangeConfigurationRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DidChangeConfigurationRegistrationOptions.hs
@@ -35,4 +35,4 @@
   toJSON (DidChangeConfigurationRegistrationOptions arg0) = Aeson.object $ concat $  ["section" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON DidChangeConfigurationRegistrationOptions where
-  parseJSON = Aeson.withObject "DidChangeConfigurationRegistrationOptions" $ \arg -> DidChangeConfigurationRegistrationOptions <$> arg Aeson..:! "section"
+  parseJSON = Aeson.withObject "DidChangeConfigurationRegistrationOptions" $ \arg -> DidChangeConfigurationRegistrationOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "section"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DidChangeWatchedFilesClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/DidChangeWatchedFilesClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DidChangeWatchedFilesClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DidChangeWatchedFilesClientCapabilities.hs
@@ -44,4 +44,4 @@
     ,"relativePatternSupport" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON DidChangeWatchedFilesClientCapabilities where
-  parseJSON = Aeson.withObject "DidChangeWatchedFilesClientCapabilities" $ \arg -> DidChangeWatchedFilesClientCapabilities <$> arg Aeson..:! "dynamicRegistration" <*> arg Aeson..:! "relativePatternSupport"
+  parseJSON = Aeson.withObject "DidChangeWatchedFilesClientCapabilities" $ \arg -> DidChangeWatchedFilesClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration" <*> arg Language.LSP.Protocol.Types.Common..:!? "relativePatternSupport"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DidSaveTextDocumentParams.hs b/generated/Language/LSP/Protocol/Internal/Types/DidSaveTextDocumentParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DidSaveTextDocumentParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DidSaveTextDocumentParams.hs
@@ -42,4 +42,4 @@
     ,"text" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON DidSaveTextDocumentParams where
-  parseJSON = Aeson.withObject "DidSaveTextDocumentParams" $ \arg -> DidSaveTextDocumentParams <$> arg Aeson..: "textDocument" <*> arg Aeson..:! "text"
+  parseJSON = Aeson.withObject "DidSaveTextDocumentParams" $ \arg -> DidSaveTextDocumentParams <$> arg Aeson..: "textDocument" <*> arg Language.LSP.Protocol.Types.Common..:!? "text"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentColorClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentColorClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentColorClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentColorClientCapabilities.hs
@@ -36,4 +36,4 @@
   toJSON (DocumentColorClientCapabilities arg0) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON DocumentColorClientCapabilities where
-  parseJSON = Aeson.withObject "DocumentColorClientCapabilities" $ \arg -> DocumentColorClientCapabilities <$> arg Aeson..:! "dynamicRegistration"
+  parseJSON = Aeson.withObject "DocumentColorClientCapabilities" $ \arg -> DocumentColorClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentColorOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentColorOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentColorOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentColorOptions.hs
@@ -34,4 +34,4 @@
   toJSON (DocumentColorOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON DocumentColorOptions where
-  parseJSON = Aeson.withObject "DocumentColorOptions" $ \arg -> DocumentColorOptions <$> arg Aeson..:! "workDoneProgress"
+  parseJSON = Aeson.withObject "DocumentColorOptions" $ \arg -> DocumentColorOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentColorParams.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentColorParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentColorParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentColorParams.hs
@@ -47,4 +47,4 @@
     ,["textDocument" Aeson..= arg2]]
 
 instance Aeson.FromJSON DocumentColorParams where
-  parseJSON = Aeson.withObject "DocumentColorParams" $ \arg -> DocumentColorParams <$> arg Aeson..:! "workDoneToken" <*> arg Aeson..:! "partialResultToken" <*> arg Aeson..: "textDocument"
+  parseJSON = Aeson.withObject "DocumentColorParams" $ \arg -> DocumentColorParams <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Language.LSP.Protocol.Types.Common..:!? "partialResultToken" <*> arg Aeson..: "textDocument"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentColorRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentColorRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentColorRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentColorRegistrationOptions.hs
@@ -48,4 +48,4 @@
     ,"id" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON DocumentColorRegistrationOptions where
-  parseJSON = Aeson.withObject "DocumentColorRegistrationOptions" $ \arg -> DocumentColorRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Aeson..:! "workDoneProgress" <*> arg Aeson..:! "id"
+  parseJSON = Aeson.withObject "DocumentColorRegistrationOptions" $ \arg -> DocumentColorRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Language.LSP.Protocol.Types.Common..:!? "id"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentDiagnosticParams.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentDiagnosticParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentDiagnosticParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentDiagnosticParams.hs
@@ -60,4 +60,4 @@
     ,"previousResultId" Language.LSP.Protocol.Types.Common..=? arg4]
 
 instance Aeson.FromJSON DocumentDiagnosticParams where
-  parseJSON = Aeson.withObject "DocumentDiagnosticParams" $ \arg -> DocumentDiagnosticParams <$> arg Aeson..:! "workDoneToken" <*> arg Aeson..:! "partialResultToken" <*> arg Aeson..: "textDocument" <*> arg Aeson..:! "identifier" <*> arg Aeson..:! "previousResultId"
+  parseJSON = Aeson.withObject "DocumentDiagnosticParams" $ \arg -> DocumentDiagnosticParams <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Language.LSP.Protocol.Types.Common..:!? "partialResultToken" <*> arg Aeson..: "textDocument" <*> arg Language.LSP.Protocol.Types.Common..:!? "identifier" <*> arg Language.LSP.Protocol.Types.Common..:!? "previousResultId"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentDiagnosticReportKind.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentDiagnosticReportKind.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentDiagnosticReportKind.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentDiagnosticReportKind.hs
@@ -39,7 +39,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum DocumentDiagnosticReportKind Data.Text.Text)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum DocumentDiagnosticReportKind)
   deriving Pretty via (ViaJSON DocumentDiagnosticReportKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum DocumentDiagnosticReportKind where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentFormattingClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentFormattingClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentFormattingClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentFormattingClientCapabilities.hs
@@ -34,4 +34,4 @@
   toJSON (DocumentFormattingClientCapabilities arg0) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON DocumentFormattingClientCapabilities where
-  parseJSON = Aeson.withObject "DocumentFormattingClientCapabilities" $ \arg -> DocumentFormattingClientCapabilities <$> arg Aeson..:! "dynamicRegistration"
+  parseJSON = Aeson.withObject "DocumentFormattingClientCapabilities" $ \arg -> DocumentFormattingClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentFormattingOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentFormattingOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentFormattingOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentFormattingOptions.hs
@@ -34,4 +34,4 @@
   toJSON (DocumentFormattingOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON DocumentFormattingOptions where
-  parseJSON = Aeson.withObject "DocumentFormattingOptions" $ \arg -> DocumentFormattingOptions <$> arg Aeson..:! "workDoneProgress"
+  parseJSON = Aeson.withObject "DocumentFormattingOptions" $ \arg -> DocumentFormattingOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentFormattingParams.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentFormattingParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentFormattingParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentFormattingParams.hs
@@ -47,4 +47,4 @@
     ,["options" Aeson..= arg2]]
 
 instance Aeson.FromJSON DocumentFormattingParams where
-  parseJSON = Aeson.withObject "DocumentFormattingParams" $ \arg -> DocumentFormattingParams <$> arg Aeson..:! "workDoneToken" <*> arg Aeson..: "textDocument" <*> arg Aeson..: "options"
+  parseJSON = Aeson.withObject "DocumentFormattingParams" $ \arg -> DocumentFormattingParams <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Aeson..: "textDocument" <*> arg Aeson..: "options"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentFormattingRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentFormattingRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentFormattingRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentFormattingRegistrationOptions.hs
@@ -41,4 +41,4 @@
     ,"workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON DocumentFormattingRegistrationOptions where
-  parseJSON = Aeson.withObject "DocumentFormattingRegistrationOptions" $ \arg -> DocumentFormattingRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Aeson..:! "workDoneProgress"
+  parseJSON = Aeson.withObject "DocumentFormattingRegistrationOptions" $ \arg -> DocumentFormattingRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentHighlight.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentHighlight.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentHighlight.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentHighlight.hs
@@ -43,4 +43,4 @@
     ,"kind" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON DocumentHighlight where
-  parseJSON = Aeson.withObject "DocumentHighlight" $ \arg -> DocumentHighlight <$> arg Aeson..: "range" <*> arg Aeson..:! "kind"
+  parseJSON = Aeson.withObject "DocumentHighlight" $ \arg -> DocumentHighlight <$> arg Aeson..: "range" <*> arg Language.LSP.Protocol.Types.Common..:!? "kind"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentHighlightClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentHighlightClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentHighlightClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentHighlightClientCapabilities.hs
@@ -34,4 +34,4 @@
   toJSON (DocumentHighlightClientCapabilities arg0) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON DocumentHighlightClientCapabilities where
-  parseJSON = Aeson.withObject "DocumentHighlightClientCapabilities" $ \arg -> DocumentHighlightClientCapabilities <$> arg Aeson..:! "dynamicRegistration"
+  parseJSON = Aeson.withObject "DocumentHighlightClientCapabilities" $ \arg -> DocumentHighlightClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentHighlightKind.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentHighlightKind.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentHighlightKind.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentHighlightKind.hs
@@ -39,7 +39,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum DocumentHighlightKind Language.LSP.Protocol.Types.Common.UInt)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum DocumentHighlightKind)
   deriving Pretty via (ViaJSON DocumentHighlightKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum DocumentHighlightKind where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentHighlightOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentHighlightOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentHighlightOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentHighlightOptions.hs
@@ -34,4 +34,4 @@
   toJSON (DocumentHighlightOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON DocumentHighlightOptions where
-  parseJSON = Aeson.withObject "DocumentHighlightOptions" $ \arg -> DocumentHighlightOptions <$> arg Aeson..:! "workDoneProgress"
+  parseJSON = Aeson.withObject "DocumentHighlightOptions" $ \arg -> DocumentHighlightOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentHighlightParams.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentHighlightParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentHighlightParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentHighlightParams.hs
@@ -53,4 +53,4 @@
     ,"partialResultToken" Language.LSP.Protocol.Types.Common..=? arg3]
 
 instance Aeson.FromJSON DocumentHighlightParams where
-  parseJSON = Aeson.withObject "DocumentHighlightParams" $ \arg -> DocumentHighlightParams <$> arg Aeson..: "textDocument" <*> arg Aeson..: "position" <*> arg Aeson..:! "workDoneToken" <*> arg Aeson..:! "partialResultToken"
+  parseJSON = Aeson.withObject "DocumentHighlightParams" $ \arg -> DocumentHighlightParams <$> arg Aeson..: "textDocument" <*> arg Aeson..: "position" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Language.LSP.Protocol.Types.Common..:!? "partialResultToken"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentHighlightRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentHighlightRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentHighlightRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentHighlightRegistrationOptions.hs
@@ -41,4 +41,4 @@
     ,"workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON DocumentHighlightRegistrationOptions where
-  parseJSON = Aeson.withObject "DocumentHighlightRegistrationOptions" $ \arg -> DocumentHighlightRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Aeson..:! "workDoneProgress"
+  parseJSON = Aeson.withObject "DocumentHighlightRegistrationOptions" $ \arg -> DocumentHighlightRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentLink.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentLink.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentLink.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentLink.hs
@@ -60,4 +60,4 @@
     ,"data" Language.LSP.Protocol.Types.Common..=? arg3]
 
 instance Aeson.FromJSON DocumentLink where
-  parseJSON = Aeson.withObject "DocumentLink" $ \arg -> DocumentLink <$> arg Aeson..: "range" <*> arg Aeson..:! "target" <*> arg Aeson..:! "tooltip" <*> arg Aeson..:! "data"
+  parseJSON = Aeson.withObject "DocumentLink" $ \arg -> DocumentLink <$> arg Aeson..: "range" <*> arg Language.LSP.Protocol.Types.Common..:!? "target" <*> arg Language.LSP.Protocol.Types.Common..:!? "tooltip" <*> arg Language.LSP.Protocol.Types.Common..:!? "data"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentLinkClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentLinkClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentLinkClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentLinkClientCapabilities.hs
@@ -41,4 +41,4 @@
     ,"tooltipSupport" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON DocumentLinkClientCapabilities where
-  parseJSON = Aeson.withObject "DocumentLinkClientCapabilities" $ \arg -> DocumentLinkClientCapabilities <$> arg Aeson..:! "dynamicRegistration" <*> arg Aeson..:! "tooltipSupport"
+  parseJSON = Aeson.withObject "DocumentLinkClientCapabilities" $ \arg -> DocumentLinkClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration" <*> arg Language.LSP.Protocol.Types.Common..:!? "tooltipSupport"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentLinkOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentLinkOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentLinkOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentLinkOptions.hs
@@ -39,4 +39,4 @@
     ,"resolveProvider" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON DocumentLinkOptions where
-  parseJSON = Aeson.withObject "DocumentLinkOptions" $ \arg -> DocumentLinkOptions <$> arg Aeson..:! "workDoneProgress" <*> arg Aeson..:! "resolveProvider"
+  parseJSON = Aeson.withObject "DocumentLinkOptions" $ \arg -> DocumentLinkOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Language.LSP.Protocol.Types.Common..:!? "resolveProvider"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentLinkParams.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentLinkParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentLinkParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentLinkParams.hs
@@ -47,4 +47,4 @@
     ,["textDocument" Aeson..= arg2]]
 
 instance Aeson.FromJSON DocumentLinkParams where
-  parseJSON = Aeson.withObject "DocumentLinkParams" $ \arg -> DocumentLinkParams <$> arg Aeson..:! "workDoneToken" <*> arg Aeson..:! "partialResultToken" <*> arg Aeson..: "textDocument"
+  parseJSON = Aeson.withObject "DocumentLinkParams" $ \arg -> DocumentLinkParams <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Language.LSP.Protocol.Types.Common..:!? "partialResultToken" <*> arg Aeson..: "textDocument"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentLinkRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentLinkRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentLinkRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentLinkRegistrationOptions.hs
@@ -46,4 +46,4 @@
     ,"resolveProvider" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON DocumentLinkRegistrationOptions where
-  parseJSON = Aeson.withObject "DocumentLinkRegistrationOptions" $ \arg -> DocumentLinkRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Aeson..:! "workDoneProgress" <*> arg Aeson..:! "resolveProvider"
+  parseJSON = Aeson.withObject "DocumentLinkRegistrationOptions" $ \arg -> DocumentLinkRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Language.LSP.Protocol.Types.Common..:!? "resolveProvider"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentOnTypeFormattingClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentOnTypeFormattingClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentOnTypeFormattingClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentOnTypeFormattingClientCapabilities.hs
@@ -34,4 +34,4 @@
   toJSON (DocumentOnTypeFormattingClientCapabilities arg0) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON DocumentOnTypeFormattingClientCapabilities where
-  parseJSON = Aeson.withObject "DocumentOnTypeFormattingClientCapabilities" $ \arg -> DocumentOnTypeFormattingClientCapabilities <$> arg Aeson..:! "dynamicRegistration"
+  parseJSON = Aeson.withObject "DocumentOnTypeFormattingClientCapabilities" $ \arg -> DocumentOnTypeFormattingClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentOnTypeFormattingOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentOnTypeFormattingOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentOnTypeFormattingOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentOnTypeFormattingOptions.hs
@@ -40,4 +40,4 @@
     ,"moreTriggerCharacter" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON DocumentOnTypeFormattingOptions where
-  parseJSON = Aeson.withObject "DocumentOnTypeFormattingOptions" $ \arg -> DocumentOnTypeFormattingOptions <$> arg Aeson..: "firstTriggerCharacter" <*> arg Aeson..:! "moreTriggerCharacter"
+  parseJSON = Aeson.withObject "DocumentOnTypeFormattingOptions" $ \arg -> DocumentOnTypeFormattingOptions <$> arg Aeson..: "firstTriggerCharacter" <*> arg Language.LSP.Protocol.Types.Common..:!? "moreTriggerCharacter"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentOnTypeFormattingRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentOnTypeFormattingRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentOnTypeFormattingRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentOnTypeFormattingRegistrationOptions.hs
@@ -47,4 +47,4 @@
     ,"moreTriggerCharacter" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON DocumentOnTypeFormattingRegistrationOptions where
-  parseJSON = Aeson.withObject "DocumentOnTypeFormattingRegistrationOptions" $ \arg -> DocumentOnTypeFormattingRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Aeson..: "firstTriggerCharacter" <*> arg Aeson..:! "moreTriggerCharacter"
+  parseJSON = Aeson.withObject "DocumentOnTypeFormattingRegistrationOptions" $ \arg -> DocumentOnTypeFormattingRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Aeson..: "firstTriggerCharacter" <*> arg Language.LSP.Protocol.Types.Common..:!? "moreTriggerCharacter"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentRangeFormattingClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentRangeFormattingClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentRangeFormattingClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentRangeFormattingClientCapabilities.hs
@@ -34,4 +34,4 @@
   toJSON (DocumentRangeFormattingClientCapabilities arg0) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON DocumentRangeFormattingClientCapabilities where
-  parseJSON = Aeson.withObject "DocumentRangeFormattingClientCapabilities" $ \arg -> DocumentRangeFormattingClientCapabilities <$> arg Aeson..:! "dynamicRegistration"
+  parseJSON = Aeson.withObject "DocumentRangeFormattingClientCapabilities" $ \arg -> DocumentRangeFormattingClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentRangeFormattingOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentRangeFormattingOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentRangeFormattingOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentRangeFormattingOptions.hs
@@ -34,4 +34,4 @@
   toJSON (DocumentRangeFormattingOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON DocumentRangeFormattingOptions where
-  parseJSON = Aeson.withObject "DocumentRangeFormattingOptions" $ \arg -> DocumentRangeFormattingOptions <$> arg Aeson..:! "workDoneProgress"
+  parseJSON = Aeson.withObject "DocumentRangeFormattingOptions" $ \arg -> DocumentRangeFormattingOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentRangeFormattingParams.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentRangeFormattingParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentRangeFormattingParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentRangeFormattingParams.hs
@@ -53,4 +53,4 @@
     ,["options" Aeson..= arg3]]
 
 instance Aeson.FromJSON DocumentRangeFormattingParams where
-  parseJSON = Aeson.withObject "DocumentRangeFormattingParams" $ \arg -> DocumentRangeFormattingParams <$> arg Aeson..:! "workDoneToken" <*> arg Aeson..: "textDocument" <*> arg Aeson..: "range" <*> arg Aeson..: "options"
+  parseJSON = Aeson.withObject "DocumentRangeFormattingParams" $ \arg -> DocumentRangeFormattingParams <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Aeson..: "textDocument" <*> arg Aeson..: "range" <*> arg Aeson..: "options"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentRangeFormattingRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentRangeFormattingRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentRangeFormattingRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentRangeFormattingRegistrationOptions.hs
@@ -41,4 +41,4 @@
     ,"workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON DocumentRangeFormattingRegistrationOptions where
-  parseJSON = Aeson.withObject "DocumentRangeFormattingRegistrationOptions" $ \arg -> DocumentRangeFormattingRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Aeson..:! "workDoneProgress"
+  parseJSON = Aeson.withObject "DocumentRangeFormattingRegistrationOptions" $ \arg -> DocumentRangeFormattingRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentSymbol.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentSymbol.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentSymbol.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentSymbol.hs
@@ -84,4 +84,4 @@
     ,"children" Language.LSP.Protocol.Types.Common..=? arg7]
 
 instance Aeson.FromJSON DocumentSymbol where
-  parseJSON = Aeson.withObject "DocumentSymbol" $ \arg -> DocumentSymbol <$> arg Aeson..: "name" <*> arg Aeson..:! "detail" <*> arg Aeson..: "kind" <*> arg Aeson..:! "tags" <*> arg Aeson..:! "deprecated" <*> arg Aeson..: "range" <*> arg Aeson..: "selectionRange" <*> arg Aeson..:! "children"
+  parseJSON = Aeson.withObject "DocumentSymbol" $ \arg -> DocumentSymbol <$> arg Aeson..: "name" <*> arg Language.LSP.Protocol.Types.Common..:!? "detail" <*> arg Aeson..: "kind" <*> arg Language.LSP.Protocol.Types.Common..:!? "tags" <*> arg Language.LSP.Protocol.Types.Common..:!? "deprecated" <*> arg Aeson..: "range" <*> arg Aeson..: "selectionRange" <*> arg Language.LSP.Protocol.Types.Common..:!? "children"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentSymbolClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentSymbolClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentSymbolClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentSymbolClientCapabilities.hs
@@ -65,4 +65,4 @@
     ,"labelSupport" Language.LSP.Protocol.Types.Common..=? arg4]
 
 instance Aeson.FromJSON DocumentSymbolClientCapabilities where
-  parseJSON = Aeson.withObject "DocumentSymbolClientCapabilities" $ \arg -> DocumentSymbolClientCapabilities <$> arg Aeson..:! "dynamicRegistration" <*> arg Aeson..:! "symbolKind" <*> arg Aeson..:! "hierarchicalDocumentSymbolSupport" <*> arg Aeson..:! "tagSupport" <*> arg Aeson..:! "labelSupport"
+  parseJSON = Aeson.withObject "DocumentSymbolClientCapabilities" $ \arg -> DocumentSymbolClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration" <*> arg Language.LSP.Protocol.Types.Common..:!? "symbolKind" <*> arg Language.LSP.Protocol.Types.Common..:!? "hierarchicalDocumentSymbolSupport" <*> arg Language.LSP.Protocol.Types.Common..:!? "tagSupport" <*> arg Language.LSP.Protocol.Types.Common..:!? "labelSupport"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentSymbolOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentSymbolOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentSymbolOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentSymbolOptions.hs
@@ -43,4 +43,4 @@
     ,"label" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON DocumentSymbolOptions where
-  parseJSON = Aeson.withObject "DocumentSymbolOptions" $ \arg -> DocumentSymbolOptions <$> arg Aeson..:! "workDoneProgress" <*> arg Aeson..:! "label"
+  parseJSON = Aeson.withObject "DocumentSymbolOptions" $ \arg -> DocumentSymbolOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Language.LSP.Protocol.Types.Common..:!? "label"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentSymbolParams.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentSymbolParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentSymbolParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentSymbolParams.hs
@@ -47,4 +47,4 @@
     ,["textDocument" Aeson..= arg2]]
 
 instance Aeson.FromJSON DocumentSymbolParams where
-  parseJSON = Aeson.withObject "DocumentSymbolParams" $ \arg -> DocumentSymbolParams <$> arg Aeson..:! "workDoneToken" <*> arg Aeson..:! "partialResultToken" <*> arg Aeson..: "textDocument"
+  parseJSON = Aeson.withObject "DocumentSymbolParams" $ \arg -> DocumentSymbolParams <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Language.LSP.Protocol.Types.Common..:!? "partialResultToken" <*> arg Aeson..: "textDocument"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentSymbolRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentSymbolRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentSymbolRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentSymbolRegistrationOptions.hs
@@ -50,4 +50,4 @@
     ,"label" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON DocumentSymbolRegistrationOptions where
-  parseJSON = Aeson.withObject "DocumentSymbolRegistrationOptions" $ \arg -> DocumentSymbolRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Aeson..:! "workDoneProgress" <*> arg Aeson..:! "label"
+  parseJSON = Aeson.withObject "DocumentSymbolRegistrationOptions" $ \arg -> DocumentSymbolRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Language.LSP.Protocol.Types.Common..:!? "label"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ErrorCodes.hs b/generated/Language/LSP/Protocol/Internal/Types/ErrorCodes.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ErrorCodes.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ErrorCodes.hs
@@ -57,7 +57,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum ErrorCodes Language.LSP.Protocol.Types.Common.Int32)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum ErrorCodes)
   deriving Pretty via (ViaJSON ErrorCodes)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum ErrorCodes where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ExecuteCommandClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/ExecuteCommandClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ExecuteCommandClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ExecuteCommandClientCapabilities.hs
@@ -34,4 +34,4 @@
   toJSON (ExecuteCommandClientCapabilities arg0) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON ExecuteCommandClientCapabilities where
-  parseJSON = Aeson.withObject "ExecuteCommandClientCapabilities" $ \arg -> ExecuteCommandClientCapabilities <$> arg Aeson..:! "dynamicRegistration"
+  parseJSON = Aeson.withObject "ExecuteCommandClientCapabilities" $ \arg -> ExecuteCommandClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ExecuteCommandOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/ExecuteCommandOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ExecuteCommandOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ExecuteCommandOptions.hs
@@ -40,4 +40,4 @@
     ,["commands" Aeson..= arg1]]
 
 instance Aeson.FromJSON ExecuteCommandOptions where
-  parseJSON = Aeson.withObject "ExecuteCommandOptions" $ \arg -> ExecuteCommandOptions <$> arg Aeson..:! "workDoneProgress" <*> arg Aeson..: "commands"
+  parseJSON = Aeson.withObject "ExecuteCommandOptions" $ \arg -> ExecuteCommandOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Aeson..: "commands"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ExecuteCommandParams.hs b/generated/Language/LSP/Protocol/Internal/Types/ExecuteCommandParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ExecuteCommandParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ExecuteCommandParams.hs
@@ -47,4 +47,4 @@
     ,"arguments" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON ExecuteCommandParams where
-  parseJSON = Aeson.withObject "ExecuteCommandParams" $ \arg -> ExecuteCommandParams <$> arg Aeson..:! "workDoneToken" <*> arg Aeson..: "command" <*> arg Aeson..:! "arguments"
+  parseJSON = Aeson.withObject "ExecuteCommandParams" $ \arg -> ExecuteCommandParams <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Aeson..: "command" <*> arg Language.LSP.Protocol.Types.Common..:!? "arguments"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ExecuteCommandRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/ExecuteCommandRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ExecuteCommandRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ExecuteCommandRegistrationOptions.hs
@@ -40,4 +40,4 @@
     ,["commands" Aeson..= arg1]]
 
 instance Aeson.FromJSON ExecuteCommandRegistrationOptions where
-  parseJSON = Aeson.withObject "ExecuteCommandRegistrationOptions" $ \arg -> ExecuteCommandRegistrationOptions <$> arg Aeson..:! "workDoneProgress" <*> arg Aeson..: "commands"
+  parseJSON = Aeson.withObject "ExecuteCommandRegistrationOptions" $ \arg -> ExecuteCommandRegistrationOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Aeson..: "commands"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ExecutionSummary.hs b/generated/Language/LSP/Protocol/Internal/Types/ExecutionSummary.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ExecutionSummary.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ExecutionSummary.hs
@@ -42,4 +42,4 @@
     ,"success" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON ExecutionSummary where
-  parseJSON = Aeson.withObject "ExecutionSummary" $ \arg -> ExecutionSummary <$> arg Aeson..: "executionOrder" <*> arg Aeson..:! "success"
+  parseJSON = Aeson.withObject "ExecutionSummary" $ \arg -> ExecutionSummary <$> arg Aeson..: "executionOrder" <*> arg Language.LSP.Protocol.Types.Common..:!? "success"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/FailureHandlingKind.hs b/generated/Language/LSP/Protocol/Internal/Types/FailureHandlingKind.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/FailureHandlingKind.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/FailureHandlingKind.hs
@@ -48,7 +48,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum FailureHandlingKind Data.Text.Text)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum FailureHandlingKind)
   deriving Pretty via (ViaJSON FailureHandlingKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum FailureHandlingKind where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/FileChangeType.hs b/generated/Language/LSP/Protocol/Internal/Types/FileChangeType.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/FileChangeType.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/FileChangeType.hs
@@ -39,7 +39,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum FileChangeType Language.LSP.Protocol.Types.Common.UInt)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum FileChangeType)
   deriving Pretty via (ViaJSON FileChangeType)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum FileChangeType where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/FileOperationClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/FileOperationClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/FileOperationClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/FileOperationClientCapabilities.hs
@@ -69,4 +69,4 @@
     ,"willDelete" Language.LSP.Protocol.Types.Common..=? arg6]
 
 instance Aeson.FromJSON FileOperationClientCapabilities where
-  parseJSON = Aeson.withObject "FileOperationClientCapabilities" $ \arg -> FileOperationClientCapabilities <$> arg Aeson..:! "dynamicRegistration" <*> arg Aeson..:! "didCreate" <*> arg Aeson..:! "willCreate" <*> arg Aeson..:! "didRename" <*> arg Aeson..:! "willRename" <*> arg Aeson..:! "didDelete" <*> arg Aeson..:! "willDelete"
+  parseJSON = Aeson.withObject "FileOperationClientCapabilities" $ \arg -> FileOperationClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration" <*> arg Language.LSP.Protocol.Types.Common..:!? "didCreate" <*> arg Language.LSP.Protocol.Types.Common..:!? "willCreate" <*> arg Language.LSP.Protocol.Types.Common..:!? "didRename" <*> arg Language.LSP.Protocol.Types.Common..:!? "willRename" <*> arg Language.LSP.Protocol.Types.Common..:!? "didDelete" <*> arg Language.LSP.Protocol.Types.Common..:!? "willDelete"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/FileOperationFilter.hs b/generated/Language/LSP/Protocol/Internal/Types/FileOperationFilter.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/FileOperationFilter.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/FileOperationFilter.hs
@@ -44,4 +44,4 @@
     ,["pattern" Aeson..= arg1]]
 
 instance Aeson.FromJSON FileOperationFilter where
-  parseJSON = Aeson.withObject "FileOperationFilter" $ \arg -> FileOperationFilter <$> arg Aeson..:! "scheme" <*> arg Aeson..: "pattern"
+  parseJSON = Aeson.withObject "FileOperationFilter" $ \arg -> FileOperationFilter <$> arg Language.LSP.Protocol.Types.Common..:!? "scheme" <*> arg Aeson..: "pattern"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/FileOperationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/FileOperationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/FileOperationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/FileOperationOptions.hs
@@ -62,4 +62,4 @@
     ,"willDelete" Language.LSP.Protocol.Types.Common..=? arg5]
 
 instance Aeson.FromJSON FileOperationOptions where
-  parseJSON = Aeson.withObject "FileOperationOptions" $ \arg -> FileOperationOptions <$> arg Aeson..:! "didCreate" <*> arg Aeson..:! "willCreate" <*> arg Aeson..:! "didRename" <*> arg Aeson..:! "willRename" <*> arg Aeson..:! "didDelete" <*> arg Aeson..:! "willDelete"
+  parseJSON = Aeson.withObject "FileOperationOptions" $ \arg -> FileOperationOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "didCreate" <*> arg Language.LSP.Protocol.Types.Common..:!? "willCreate" <*> arg Language.LSP.Protocol.Types.Common..:!? "didRename" <*> arg Language.LSP.Protocol.Types.Common..:!? "willRename" <*> arg Language.LSP.Protocol.Types.Common..:!? "didDelete" <*> arg Language.LSP.Protocol.Types.Common..:!? "willDelete"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/FileOperationPattern.hs b/generated/Language/LSP/Protocol/Internal/Types/FileOperationPattern.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/FileOperationPattern.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/FileOperationPattern.hs
@@ -58,4 +58,4 @@
     ,"options" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON FileOperationPattern where
-  parseJSON = Aeson.withObject "FileOperationPattern" $ \arg -> FileOperationPattern <$> arg Aeson..: "glob" <*> arg Aeson..:! "matches" <*> arg Aeson..:! "options"
+  parseJSON = Aeson.withObject "FileOperationPattern" $ \arg -> FileOperationPattern <$> arg Aeson..: "glob" <*> arg Language.LSP.Protocol.Types.Common..:!? "matches" <*> arg Language.LSP.Protocol.Types.Common..:!? "options"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/FileOperationPatternKind.hs b/generated/Language/LSP/Protocol/Internal/Types/FileOperationPatternKind.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/FileOperationPatternKind.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/FileOperationPatternKind.hs
@@ -38,7 +38,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum FileOperationPatternKind Data.Text.Text)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum FileOperationPatternKind)
   deriving Pretty via (ViaJSON FileOperationPatternKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum FileOperationPatternKind where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/FileOperationPatternOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/FileOperationPatternOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/FileOperationPatternOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/FileOperationPatternOptions.hs
@@ -36,4 +36,4 @@
   toJSON (FileOperationPatternOptions arg0) = Aeson.object $ concat $  ["ignoreCase" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON FileOperationPatternOptions where
-  parseJSON = Aeson.withObject "FileOperationPatternOptions" $ \arg -> FileOperationPatternOptions <$> arg Aeson..:! "ignoreCase"
+  parseJSON = Aeson.withObject "FileOperationPatternOptions" $ \arg -> FileOperationPatternOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "ignoreCase"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/FileSystemWatcher.hs b/generated/Language/LSP/Protocol/Internal/Types/FileSystemWatcher.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/FileSystemWatcher.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/FileSystemWatcher.hs
@@ -45,4 +45,4 @@
     ,"kind" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON FileSystemWatcher where
-  parseJSON = Aeson.withObject "FileSystemWatcher" $ \arg -> FileSystemWatcher <$> arg Aeson..: "globPattern" <*> arg Aeson..:! "kind"
+  parseJSON = Aeson.withObject "FileSystemWatcher" $ \arg -> FileSystemWatcher <$> arg Aeson..: "globPattern" <*> arg Language.LSP.Protocol.Types.Common..:!? "kind"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/FoldingRange.hs b/generated/Language/LSP/Protocol/Internal/Types/FoldingRange.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/FoldingRange.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/FoldingRange.hs
@@ -70,4 +70,4 @@
     ,"collapsedText" Language.LSP.Protocol.Types.Common..=? arg5]
 
 instance Aeson.FromJSON FoldingRange where
-  parseJSON = Aeson.withObject "FoldingRange" $ \arg -> FoldingRange <$> arg Aeson..: "startLine" <*> arg Aeson..:! "startCharacter" <*> arg Aeson..: "endLine" <*> arg Aeson..:! "endCharacter" <*> arg Aeson..:! "kind" <*> arg Aeson..:! "collapsedText"
+  parseJSON = Aeson.withObject "FoldingRange" $ \arg -> FoldingRange <$> arg Aeson..: "startLine" <*> arg Language.LSP.Protocol.Types.Common..:!? "startCharacter" <*> arg Aeson..: "endLine" <*> arg Language.LSP.Protocol.Types.Common..:!? "endCharacter" <*> arg Language.LSP.Protocol.Types.Common..:!? "kind" <*> arg Language.LSP.Protocol.Types.Common..:!? "collapsedText"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/FoldingRangeClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/FoldingRangeClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/FoldingRangeClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/FoldingRangeClientCapabilities.hs
@@ -67,4 +67,4 @@
     ,"foldingRange" Language.LSP.Protocol.Types.Common..=? arg4]
 
 instance Aeson.FromJSON FoldingRangeClientCapabilities where
-  parseJSON = Aeson.withObject "FoldingRangeClientCapabilities" $ \arg -> FoldingRangeClientCapabilities <$> arg Aeson..:! "dynamicRegistration" <*> arg Aeson..:! "rangeLimit" <*> arg Aeson..:! "lineFoldingOnly" <*> arg Aeson..:! "foldingRangeKind" <*> arg Aeson..:! "foldingRange"
+  parseJSON = Aeson.withObject "FoldingRangeClientCapabilities" $ \arg -> FoldingRangeClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration" <*> arg Language.LSP.Protocol.Types.Common..:!? "rangeLimit" <*> arg Language.LSP.Protocol.Types.Common..:!? "lineFoldingOnly" <*> arg Language.LSP.Protocol.Types.Common..:!? "foldingRangeKind" <*> arg Language.LSP.Protocol.Types.Common..:!? "foldingRange"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/FoldingRangeKind.hs b/generated/Language/LSP/Protocol/Internal/Types/FoldingRangeKind.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/FoldingRangeKind.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/FoldingRangeKind.hs
@@ -41,7 +41,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON
-  , Data.String.IsString ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum FoldingRangeKind Data.Text.Text)
+  , Data.String.IsString ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum FoldingRangeKind)
   deriving Pretty via (ViaJSON FoldingRangeKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum FoldingRangeKind where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/FoldingRangeOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/FoldingRangeOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/FoldingRangeOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/FoldingRangeOptions.hs
@@ -34,4 +34,4 @@
   toJSON (FoldingRangeOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON FoldingRangeOptions where
-  parseJSON = Aeson.withObject "FoldingRangeOptions" $ \arg -> FoldingRangeOptions <$> arg Aeson..:! "workDoneProgress"
+  parseJSON = Aeson.withObject "FoldingRangeOptions" $ \arg -> FoldingRangeOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/FoldingRangeParams.hs b/generated/Language/LSP/Protocol/Internal/Types/FoldingRangeParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/FoldingRangeParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/FoldingRangeParams.hs
@@ -47,4 +47,4 @@
     ,["textDocument" Aeson..= arg2]]
 
 instance Aeson.FromJSON FoldingRangeParams where
-  parseJSON = Aeson.withObject "FoldingRangeParams" $ \arg -> FoldingRangeParams <$> arg Aeson..:! "workDoneToken" <*> arg Aeson..:! "partialResultToken" <*> arg Aeson..: "textDocument"
+  parseJSON = Aeson.withObject "FoldingRangeParams" $ \arg -> FoldingRangeParams <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Language.LSP.Protocol.Types.Common..:!? "partialResultToken" <*> arg Aeson..: "textDocument"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/FoldingRangeRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/FoldingRangeRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/FoldingRangeRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/FoldingRangeRegistrationOptions.hs
@@ -48,4 +48,4 @@
     ,"id" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON FoldingRangeRegistrationOptions where
-  parseJSON = Aeson.withObject "FoldingRangeRegistrationOptions" $ \arg -> FoldingRangeRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Aeson..:! "workDoneProgress" <*> arg Aeson..:! "id"
+  parseJSON = Aeson.withObject "FoldingRangeRegistrationOptions" $ \arg -> FoldingRangeRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Language.LSP.Protocol.Types.Common..:!? "id"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/FormattingOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/FormattingOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/FormattingOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/FormattingOptions.hs
@@ -60,4 +60,4 @@
     ,"trimFinalNewlines" Language.LSP.Protocol.Types.Common..=? arg4]
 
 instance Aeson.FromJSON FormattingOptions where
-  parseJSON = Aeson.withObject "FormattingOptions" $ \arg -> FormattingOptions <$> arg Aeson..: "tabSize" <*> arg Aeson..: "insertSpaces" <*> arg Aeson..:! "trimTrailingWhitespace" <*> arg Aeson..:! "insertFinalNewline" <*> arg Aeson..:! "trimFinalNewlines"
+  parseJSON = Aeson.withObject "FormattingOptions" $ \arg -> FormattingOptions <$> arg Aeson..: "tabSize" <*> arg Aeson..: "insertSpaces" <*> arg Language.LSP.Protocol.Types.Common..:!? "trimTrailingWhitespace" <*> arg Language.LSP.Protocol.Types.Common..:!? "insertFinalNewline" <*> arg Language.LSP.Protocol.Types.Common..:!? "trimFinalNewlines"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/FullDocumentDiagnosticReport.hs b/generated/Language/LSP/Protocol/Internal/Types/FullDocumentDiagnosticReport.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/FullDocumentDiagnosticReport.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/FullDocumentDiagnosticReport.hs
@@ -51,4 +51,4 @@
     ,["items" Aeson..= arg2]]
 
 instance Aeson.FromJSON FullDocumentDiagnosticReport where
-  parseJSON = Aeson.withObject "FullDocumentDiagnosticReport" $ \arg -> FullDocumentDiagnosticReport <$> arg Aeson..: "kind" <*> arg Aeson..:! "resultId" <*> arg Aeson..: "items"
+  parseJSON = Aeson.withObject "FullDocumentDiagnosticReport" $ \arg -> FullDocumentDiagnosticReport <$> arg Aeson..: "kind" <*> arg Language.LSP.Protocol.Types.Common..:!? "resultId" <*> arg Aeson..: "items"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/GeneralClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/GeneralClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/GeneralClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/GeneralClientCapabilities.hs
@@ -82,4 +82,4 @@
     ,"positionEncodings" Language.LSP.Protocol.Types.Common..=? arg3]
 
 instance Aeson.FromJSON GeneralClientCapabilities where
-  parseJSON = Aeson.withObject "GeneralClientCapabilities" $ \arg -> GeneralClientCapabilities <$> arg Aeson..:! "staleRequestSupport" <*> arg Aeson..:! "regularExpressions" <*> arg Aeson..:! "markdown" <*> arg Aeson..:! "positionEncodings"
+  parseJSON = Aeson.withObject "GeneralClientCapabilities" $ \arg -> GeneralClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "staleRequestSupport" <*> arg Language.LSP.Protocol.Types.Common..:!? "regularExpressions" <*> arg Language.LSP.Protocol.Types.Common..:!? "markdown" <*> arg Language.LSP.Protocol.Types.Common..:!? "positionEncodings"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/Hover.hs b/generated/Language/LSP/Protocol/Internal/Types/Hover.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/Hover.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/Hover.hs
@@ -43,4 +43,4 @@
     ,"range" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON Hover where
-  parseJSON = Aeson.withObject "Hover" $ \arg -> Hover <$> arg Aeson..: "contents" <*> arg Aeson..:! "range"
+  parseJSON = Aeson.withObject "Hover" $ \arg -> Hover <$> arg Aeson..: "contents" <*> arg Language.LSP.Protocol.Types.Common..:!? "range"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/HoverClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/HoverClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/HoverClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/HoverClientCapabilities.hs
@@ -41,4 +41,4 @@
     ,"contentFormat" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON HoverClientCapabilities where
-  parseJSON = Aeson.withObject "HoverClientCapabilities" $ \arg -> HoverClientCapabilities <$> arg Aeson..:! "dynamicRegistration" <*> arg Aeson..:! "contentFormat"
+  parseJSON = Aeson.withObject "HoverClientCapabilities" $ \arg -> HoverClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration" <*> arg Language.LSP.Protocol.Types.Common..:!? "contentFormat"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/HoverOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/HoverOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/HoverOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/HoverOptions.hs
@@ -34,4 +34,4 @@
   toJSON (HoverOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON HoverOptions where
-  parseJSON = Aeson.withObject "HoverOptions" $ \arg -> HoverOptions <$> arg Aeson..:! "workDoneProgress"
+  parseJSON = Aeson.withObject "HoverOptions" $ \arg -> HoverOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/HoverParams.hs b/generated/Language/LSP/Protocol/Internal/Types/HoverParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/HoverParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/HoverParams.hs
@@ -47,4 +47,4 @@
     ,"workDoneToken" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON HoverParams where
-  parseJSON = Aeson.withObject "HoverParams" $ \arg -> HoverParams <$> arg Aeson..: "textDocument" <*> arg Aeson..: "position" <*> arg Aeson..:! "workDoneToken"
+  parseJSON = Aeson.withObject "HoverParams" $ \arg -> HoverParams <$> arg Aeson..: "textDocument" <*> arg Aeson..: "position" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/HoverRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/HoverRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/HoverRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/HoverRegistrationOptions.hs
@@ -41,4 +41,4 @@
     ,"workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON HoverRegistrationOptions where
-  parseJSON = Aeson.withObject "HoverRegistrationOptions" $ \arg -> HoverRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Aeson..:! "workDoneProgress"
+  parseJSON = Aeson.withObject "HoverRegistrationOptions" $ \arg -> HoverRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ImplementationClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/ImplementationClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ImplementationClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ImplementationClientCapabilities.hs
@@ -43,4 +43,4 @@
     ,"linkSupport" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON ImplementationClientCapabilities where
-  parseJSON = Aeson.withObject "ImplementationClientCapabilities" $ \arg -> ImplementationClientCapabilities <$> arg Aeson..:! "dynamicRegistration" <*> arg Aeson..:! "linkSupport"
+  parseJSON = Aeson.withObject "ImplementationClientCapabilities" $ \arg -> ImplementationClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration" <*> arg Language.LSP.Protocol.Types.Common..:!? "linkSupport"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ImplementationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/ImplementationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ImplementationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ImplementationOptions.hs
@@ -34,4 +34,4 @@
   toJSON (ImplementationOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON ImplementationOptions where
-  parseJSON = Aeson.withObject "ImplementationOptions" $ \arg -> ImplementationOptions <$> arg Aeson..:! "workDoneProgress"
+  parseJSON = Aeson.withObject "ImplementationOptions" $ \arg -> ImplementationOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ImplementationParams.hs b/generated/Language/LSP/Protocol/Internal/Types/ImplementationParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ImplementationParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ImplementationParams.hs
@@ -53,4 +53,4 @@
     ,"partialResultToken" Language.LSP.Protocol.Types.Common..=? arg3]
 
 instance Aeson.FromJSON ImplementationParams where
-  parseJSON = Aeson.withObject "ImplementationParams" $ \arg -> ImplementationParams <$> arg Aeson..: "textDocument" <*> arg Aeson..: "position" <*> arg Aeson..:! "workDoneToken" <*> arg Aeson..:! "partialResultToken"
+  parseJSON = Aeson.withObject "ImplementationParams" $ \arg -> ImplementationParams <$> arg Aeson..: "textDocument" <*> arg Aeson..: "position" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Language.LSP.Protocol.Types.Common..:!? "partialResultToken"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ImplementationRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/ImplementationRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ImplementationRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ImplementationRegistrationOptions.hs
@@ -48,4 +48,4 @@
     ,"id" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON ImplementationRegistrationOptions where
-  parseJSON = Aeson.withObject "ImplementationRegistrationOptions" $ \arg -> ImplementationRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Aeson..:! "workDoneProgress" <*> arg Aeson..:! "id"
+  parseJSON = Aeson.withObject "ImplementationRegistrationOptions" $ \arg -> ImplementationRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Language.LSP.Protocol.Types.Common..:!? "id"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/InitializeParams.hs b/generated/Language/LSP/Protocol/Internal/Types/InitializeParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/InitializeParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/InitializeParams.hs
@@ -113,4 +113,4 @@
     ,"workspaceFolders" Language.LSP.Protocol.Types.Common..=? arg9]
 
 instance Aeson.FromJSON InitializeParams where
-  parseJSON = Aeson.withObject "InitializeParams" $ \arg -> InitializeParams <$> arg Aeson..:! "workDoneToken" <*> arg Aeson..: "processId" <*> arg Aeson..:! "clientInfo" <*> arg Aeson..:! "locale" <*> arg Aeson..:! "rootPath" <*> arg Aeson..: "rootUri" <*> arg Aeson..: "capabilities" <*> arg Aeson..:! "initializationOptions" <*> arg Aeson..:! "trace" <*> arg Aeson..:! "workspaceFolders"
+  parseJSON = Aeson.withObject "InitializeParams" $ \arg -> InitializeParams <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Aeson..: "processId" <*> arg Language.LSP.Protocol.Types.Common..:!? "clientInfo" <*> arg Language.LSP.Protocol.Types.Common..:!? "locale" <*> arg Language.LSP.Protocol.Types.Common..:!? "rootPath" <*> arg Aeson..: "rootUri" <*> arg Aeson..: "capabilities" <*> arg Language.LSP.Protocol.Types.Common..:!? "initializationOptions" <*> arg Language.LSP.Protocol.Types.Common..:!? "trace" <*> arg Language.LSP.Protocol.Types.Common..:!? "workspaceFolders"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/InitializeResult.hs b/generated/Language/LSP/Protocol/Internal/Types/InitializeResult.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/InitializeResult.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/InitializeResult.hs
@@ -44,4 +44,4 @@
     ,"serverInfo" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON InitializeResult where
-  parseJSON = Aeson.withObject "InitializeResult" $ \arg -> InitializeResult <$> arg Aeson..: "capabilities" <*> arg Aeson..:! "serverInfo"
+  parseJSON = Aeson.withObject "InitializeResult" $ \arg -> InitializeResult <$> arg Aeson..: "capabilities" <*> arg Language.LSP.Protocol.Types.Common..:!? "serverInfo"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/InlayHint.hs b/generated/Language/LSP/Protocol/Internal/Types/InlayHint.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/InlayHint.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/InlayHint.hs
@@ -95,4 +95,4 @@
     ,"data" Language.LSP.Protocol.Types.Common..=? arg7]
 
 instance Aeson.FromJSON InlayHint where
-  parseJSON = Aeson.withObject "InlayHint" $ \arg -> InlayHint <$> arg Aeson..: "position" <*> arg Aeson..: "label" <*> arg Aeson..:! "kind" <*> arg Aeson..:! "textEdits" <*> arg Aeson..:! "tooltip" <*> arg Aeson..:! "paddingLeft" <*> arg Aeson..:! "paddingRight" <*> arg Aeson..:! "data"
+  parseJSON = Aeson.withObject "InlayHint" $ \arg -> InlayHint <$> arg Aeson..: "position" <*> arg Aeson..: "label" <*> arg Language.LSP.Protocol.Types.Common..:!? "kind" <*> arg Language.LSP.Protocol.Types.Common..:!? "textEdits" <*> arg Language.LSP.Protocol.Types.Common..:!? "tooltip" <*> arg Language.LSP.Protocol.Types.Common..:!? "paddingLeft" <*> arg Language.LSP.Protocol.Types.Common..:!? "paddingRight" <*> arg Language.LSP.Protocol.Types.Common..:!? "data"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/InlayHintClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/InlayHintClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/InlayHintClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/InlayHintClientCapabilities.hs
@@ -44,4 +44,4 @@
     ,"resolveSupport" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON InlayHintClientCapabilities where
-  parseJSON = Aeson.withObject "InlayHintClientCapabilities" $ \arg -> InlayHintClientCapabilities <$> arg Aeson..:! "dynamicRegistration" <*> arg Aeson..:! "resolveSupport"
+  parseJSON = Aeson.withObject "InlayHintClientCapabilities" $ \arg -> InlayHintClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration" <*> arg Language.LSP.Protocol.Types.Common..:!? "resolveSupport"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/InlayHintKind.hs b/generated/Language/LSP/Protocol/Internal/Types/InlayHintKind.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/InlayHintKind.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/InlayHintKind.hs
@@ -37,7 +37,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum InlayHintKind Language.LSP.Protocol.Types.Common.UInt)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum InlayHintKind)
   deriving Pretty via (ViaJSON InlayHintKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum InlayHintKind where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/InlayHintLabelPart.hs b/generated/Language/LSP/Protocol/Internal/Types/InlayHintLabelPart.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/InlayHintLabelPart.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/InlayHintLabelPart.hs
@@ -71,4 +71,4 @@
     ,"command" Language.LSP.Protocol.Types.Common..=? arg3]
 
 instance Aeson.FromJSON InlayHintLabelPart where
-  parseJSON = Aeson.withObject "InlayHintLabelPart" $ \arg -> InlayHintLabelPart <$> arg Aeson..: "value" <*> arg Aeson..:! "tooltip" <*> arg Aeson..:! "location" <*> arg Aeson..:! "command"
+  parseJSON = Aeson.withObject "InlayHintLabelPart" $ \arg -> InlayHintLabelPart <$> arg Aeson..: "value" <*> arg Language.LSP.Protocol.Types.Common..:!? "tooltip" <*> arg Language.LSP.Protocol.Types.Common..:!? "location" <*> arg Language.LSP.Protocol.Types.Common..:!? "command"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/InlayHintOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/InlayHintOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/InlayHintOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/InlayHintOptions.hs
@@ -42,4 +42,4 @@
     ,"resolveProvider" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON InlayHintOptions where
-  parseJSON = Aeson.withObject "InlayHintOptions" $ \arg -> InlayHintOptions <$> arg Aeson..:! "workDoneProgress" <*> arg Aeson..:! "resolveProvider"
+  parseJSON = Aeson.withObject "InlayHintOptions" $ \arg -> InlayHintOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Language.LSP.Protocol.Types.Common..:!? "resolveProvider"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/InlayHintParams.hs b/generated/Language/LSP/Protocol/Internal/Types/InlayHintParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/InlayHintParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/InlayHintParams.hs
@@ -49,4 +49,4 @@
     ,["range" Aeson..= arg2]]
 
 instance Aeson.FromJSON InlayHintParams where
-  parseJSON = Aeson.withObject "InlayHintParams" $ \arg -> InlayHintParams <$> arg Aeson..:! "workDoneToken" <*> arg Aeson..: "textDocument" <*> arg Aeson..: "range"
+  parseJSON = Aeson.withObject "InlayHintParams" $ \arg -> InlayHintParams <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Aeson..: "textDocument" <*> arg Aeson..: "range"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/InlayHintRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/InlayHintRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/InlayHintRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/InlayHintRegistrationOptions.hs
@@ -56,4 +56,4 @@
     ,"id" Language.LSP.Protocol.Types.Common..=? arg3]
 
 instance Aeson.FromJSON InlayHintRegistrationOptions where
-  parseJSON = Aeson.withObject "InlayHintRegistrationOptions" $ \arg -> InlayHintRegistrationOptions <$> arg Aeson..:! "workDoneProgress" <*> arg Aeson..:! "resolveProvider" <*> arg Aeson..: "documentSelector" <*> arg Aeson..:! "id"
+  parseJSON = Aeson.withObject "InlayHintRegistrationOptions" $ \arg -> InlayHintRegistrationOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Language.LSP.Protocol.Types.Common..:!? "resolveProvider" <*> arg Aeson..: "documentSelector" <*> arg Language.LSP.Protocol.Types.Common..:!? "id"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/InlayHintWorkspaceClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/InlayHintWorkspaceClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/InlayHintWorkspaceClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/InlayHintWorkspaceClientCapabilities.hs
@@ -42,4 +42,4 @@
   toJSON (InlayHintWorkspaceClientCapabilities arg0) = Aeson.object $ concat $  ["refreshSupport" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON InlayHintWorkspaceClientCapabilities where
-  parseJSON = Aeson.withObject "InlayHintWorkspaceClientCapabilities" $ \arg -> InlayHintWorkspaceClientCapabilities <$> arg Aeson..:! "refreshSupport"
+  parseJSON = Aeson.withObject "InlayHintWorkspaceClientCapabilities" $ \arg -> InlayHintWorkspaceClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "refreshSupport"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/InlineValueClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/InlineValueClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/InlineValueClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/InlineValueClientCapabilities.hs
@@ -36,4 +36,4 @@
   toJSON (InlineValueClientCapabilities arg0) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON InlineValueClientCapabilities where
-  parseJSON = Aeson.withObject "InlineValueClientCapabilities" $ \arg -> InlineValueClientCapabilities <$> arg Aeson..:! "dynamicRegistration"
+  parseJSON = Aeson.withObject "InlineValueClientCapabilities" $ \arg -> InlineValueClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/InlineValueEvaluatableExpression.hs b/generated/Language/LSP/Protocol/Internal/Types/InlineValueEvaluatableExpression.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/InlineValueEvaluatableExpression.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/InlineValueEvaluatableExpression.hs
@@ -46,4 +46,4 @@
     ,"expression" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON InlineValueEvaluatableExpression where
-  parseJSON = Aeson.withObject "InlineValueEvaluatableExpression" $ \arg -> InlineValueEvaluatableExpression <$> arg Aeson..: "range" <*> arg Aeson..:! "expression"
+  parseJSON = Aeson.withObject "InlineValueEvaluatableExpression" $ \arg -> InlineValueEvaluatableExpression <$> arg Aeson..: "range" <*> arg Language.LSP.Protocol.Types.Common..:!? "expression"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/InlineValueOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/InlineValueOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/InlineValueOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/InlineValueOptions.hs
@@ -36,4 +36,4 @@
   toJSON (InlineValueOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON InlineValueOptions where
-  parseJSON = Aeson.withObject "InlineValueOptions" $ \arg -> InlineValueOptions <$> arg Aeson..:! "workDoneProgress"
+  parseJSON = Aeson.withObject "InlineValueOptions" $ \arg -> InlineValueOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/InlineValueParams.hs b/generated/Language/LSP/Protocol/Internal/Types/InlineValueParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/InlineValueParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/InlineValueParams.hs
@@ -56,4 +56,4 @@
     ,["context" Aeson..= arg3]]
 
 instance Aeson.FromJSON InlineValueParams where
-  parseJSON = Aeson.withObject "InlineValueParams" $ \arg -> InlineValueParams <$> arg Aeson..:! "workDoneToken" <*> arg Aeson..: "textDocument" <*> arg Aeson..: "range" <*> arg Aeson..: "context"
+  parseJSON = Aeson.withObject "InlineValueParams" $ \arg -> InlineValueParams <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Aeson..: "textDocument" <*> arg Aeson..: "range" <*> arg Aeson..: "context"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/InlineValueRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/InlineValueRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/InlineValueRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/InlineValueRegistrationOptions.hs
@@ -50,4 +50,4 @@
     ,"id" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON InlineValueRegistrationOptions where
-  parseJSON = Aeson.withObject "InlineValueRegistrationOptions" $ \arg -> InlineValueRegistrationOptions <$> arg Aeson..:! "workDoneProgress" <*> arg Aeson..: "documentSelector" <*> arg Aeson..:! "id"
+  parseJSON = Aeson.withObject "InlineValueRegistrationOptions" $ \arg -> InlineValueRegistrationOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Aeson..: "documentSelector" <*> arg Language.LSP.Protocol.Types.Common..:!? "id"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/InlineValueVariableLookup.hs b/generated/Language/LSP/Protocol/Internal/Types/InlineValueVariableLookup.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/InlineValueVariableLookup.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/InlineValueVariableLookup.hs
@@ -51,4 +51,4 @@
     ,["caseSensitiveLookup" Aeson..= arg2]]
 
 instance Aeson.FromJSON InlineValueVariableLookup where
-  parseJSON = Aeson.withObject "InlineValueVariableLookup" $ \arg -> InlineValueVariableLookup <$> arg Aeson..: "range" <*> arg Aeson..:! "variableName" <*> arg Aeson..: "caseSensitiveLookup"
+  parseJSON = Aeson.withObject "InlineValueVariableLookup" $ \arg -> InlineValueVariableLookup <$> arg Aeson..: "range" <*> arg Language.LSP.Protocol.Types.Common..:!? "variableName" <*> arg Aeson..: "caseSensitiveLookup"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/InlineValueWorkspaceClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/InlineValueWorkspaceClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/InlineValueWorkspaceClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/InlineValueWorkspaceClientCapabilities.hs
@@ -42,4 +42,4 @@
   toJSON (InlineValueWorkspaceClientCapabilities arg0) = Aeson.object $ concat $  ["refreshSupport" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON InlineValueWorkspaceClientCapabilities where
-  parseJSON = Aeson.withObject "InlineValueWorkspaceClientCapabilities" $ \arg -> InlineValueWorkspaceClientCapabilities <$> arg Aeson..:! "refreshSupport"
+  parseJSON = Aeson.withObject "InlineValueWorkspaceClientCapabilities" $ \arg -> InlineValueWorkspaceClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "refreshSupport"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/InsertTextFormat.hs b/generated/Language/LSP/Protocol/Internal/Types/InsertTextFormat.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/InsertTextFormat.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/InsertTextFormat.hs
@@ -43,7 +43,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum InsertTextFormat Language.LSP.Protocol.Types.Common.UInt)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum InsertTextFormat)
   deriving Pretty via (ViaJSON InsertTextFormat)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum InsertTextFormat where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/InsertTextMode.hs b/generated/Language/LSP/Protocol/Internal/Types/InsertTextMode.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/InsertTextMode.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/InsertTextMode.hs
@@ -48,7 +48,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum InsertTextMode Language.LSP.Protocol.Types.Common.UInt)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum InsertTextMode)
   deriving Pretty via (ViaJSON InsertTextMode)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum InsertTextMode where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/LSPErrorCodes.hs b/generated/Language/LSP/Protocol/Internal/Types/LSPErrorCodes.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/LSPErrorCodes.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/LSPErrorCodes.hs
@@ -61,7 +61,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum LSPErrorCodes Language.LSP.Protocol.Types.Common.Int32)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum LSPErrorCodes)
   deriving Pretty via (ViaJSON LSPErrorCodes)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum LSPErrorCodes where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/LinkedEditingRangeClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/LinkedEditingRangeClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/LinkedEditingRangeClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/LinkedEditingRangeClientCapabilities.hs
@@ -38,4 +38,4 @@
   toJSON (LinkedEditingRangeClientCapabilities arg0) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON LinkedEditingRangeClientCapabilities where
-  parseJSON = Aeson.withObject "LinkedEditingRangeClientCapabilities" $ \arg -> LinkedEditingRangeClientCapabilities <$> arg Aeson..:! "dynamicRegistration"
+  parseJSON = Aeson.withObject "LinkedEditingRangeClientCapabilities" $ \arg -> LinkedEditingRangeClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/LinkedEditingRangeOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/LinkedEditingRangeOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/LinkedEditingRangeOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/LinkedEditingRangeOptions.hs
@@ -34,4 +34,4 @@
   toJSON (LinkedEditingRangeOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON LinkedEditingRangeOptions where
-  parseJSON = Aeson.withObject "LinkedEditingRangeOptions" $ \arg -> LinkedEditingRangeOptions <$> arg Aeson..:! "workDoneProgress"
+  parseJSON = Aeson.withObject "LinkedEditingRangeOptions" $ \arg -> LinkedEditingRangeOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/LinkedEditingRangeParams.hs b/generated/Language/LSP/Protocol/Internal/Types/LinkedEditingRangeParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/LinkedEditingRangeParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/LinkedEditingRangeParams.hs
@@ -47,4 +47,4 @@
     ,"workDoneToken" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON LinkedEditingRangeParams where
-  parseJSON = Aeson.withObject "LinkedEditingRangeParams" $ \arg -> LinkedEditingRangeParams <$> arg Aeson..: "textDocument" <*> arg Aeson..: "position" <*> arg Aeson..:! "workDoneToken"
+  parseJSON = Aeson.withObject "LinkedEditingRangeParams" $ \arg -> LinkedEditingRangeParams <$> arg Aeson..: "textDocument" <*> arg Aeson..: "position" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/LinkedEditingRangeRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/LinkedEditingRangeRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/LinkedEditingRangeRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/LinkedEditingRangeRegistrationOptions.hs
@@ -48,4 +48,4 @@
     ,"id" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON LinkedEditingRangeRegistrationOptions where
-  parseJSON = Aeson.withObject "LinkedEditingRangeRegistrationOptions" $ \arg -> LinkedEditingRangeRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Aeson..:! "workDoneProgress" <*> arg Aeson..:! "id"
+  parseJSON = Aeson.withObject "LinkedEditingRangeRegistrationOptions" $ \arg -> LinkedEditingRangeRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Language.LSP.Protocol.Types.Common..:!? "id"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/LinkedEditingRanges.hs b/generated/Language/LSP/Protocol/Internal/Types/LinkedEditingRanges.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/LinkedEditingRanges.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/LinkedEditingRanges.hs
@@ -46,4 +46,4 @@
     ,"wordPattern" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON LinkedEditingRanges where
-  parseJSON = Aeson.withObject "LinkedEditingRanges" $ \arg -> LinkedEditingRanges <$> arg Aeson..: "ranges" <*> arg Aeson..:! "wordPattern"
+  parseJSON = Aeson.withObject "LinkedEditingRanges" $ \arg -> LinkedEditingRanges <$> arg Aeson..: "ranges" <*> arg Language.LSP.Protocol.Types.Common..:!? "wordPattern"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/LocationLink.hs b/generated/Language/LSP/Protocol/Internal/Types/LocationLink.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/LocationLink.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/LocationLink.hs
@@ -58,4 +58,4 @@
     ,["targetSelectionRange" Aeson..= arg3]]
 
 instance Aeson.FromJSON LocationLink where
-  parseJSON = Aeson.withObject "LocationLink" $ \arg -> LocationLink <$> arg Aeson..:! "originSelectionRange" <*> arg Aeson..: "targetUri" <*> arg Aeson..: "targetRange" <*> arg Aeson..: "targetSelectionRange"
+  parseJSON = Aeson.withObject "LocationLink" $ \arg -> LocationLink <$> arg Language.LSP.Protocol.Types.Common..:!? "originSelectionRange" <*> arg Aeson..: "targetUri" <*> arg Aeson..: "targetRange" <*> arg Aeson..: "targetSelectionRange"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/LogTraceParams.hs b/generated/Language/LSP/Protocol/Internal/Types/LogTraceParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/LogTraceParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/LogTraceParams.hs
@@ -40,4 +40,4 @@
     ,"verbose" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON LogTraceParams where
-  parseJSON = Aeson.withObject "LogTraceParams" $ \arg -> LogTraceParams <$> arg Aeson..: "message" <*> arg Aeson..:! "verbose"
+  parseJSON = Aeson.withObject "LogTraceParams" $ \arg -> LogTraceParams <$> arg Aeson..: "message" <*> arg Language.LSP.Protocol.Types.Common..:!? "verbose"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/MarkdownClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/MarkdownClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/MarkdownClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/MarkdownClientCapabilities.hs
@@ -50,4 +50,4 @@
     ,"allowedTags" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON MarkdownClientCapabilities where
-  parseJSON = Aeson.withObject "MarkdownClientCapabilities" $ \arg -> MarkdownClientCapabilities <$> arg Aeson..: "parser" <*> arg Aeson..:! "version" <*> arg Aeson..:! "allowedTags"
+  parseJSON = Aeson.withObject "MarkdownClientCapabilities" $ \arg -> MarkdownClientCapabilities <$> arg Aeson..: "parser" <*> arg Language.LSP.Protocol.Types.Common..:!? "version" <*> arg Language.LSP.Protocol.Types.Common..:!? "allowedTags"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/MarkupKind.hs b/generated/Language/LSP/Protocol/Internal/Types/MarkupKind.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/MarkupKind.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/MarkupKind.hs
@@ -39,7 +39,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum MarkupKind Data.Text.Text)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum MarkupKind)
   deriving Pretty via (ViaJSON MarkupKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum MarkupKind where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/MessageType.hs b/generated/Language/LSP/Protocol/Internal/Types/MessageType.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/MessageType.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/MessageType.hs
@@ -43,7 +43,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum MessageType Language.LSP.Protocol.Types.Common.UInt)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum MessageType)
   deriving Pretty via (ViaJSON MessageType)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum MessageType where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/Moniker.hs b/generated/Language/LSP/Protocol/Internal/Types/Moniker.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/Moniker.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/Moniker.hs
@@ -55,4 +55,4 @@
     ,"kind" Language.LSP.Protocol.Types.Common..=? arg3]
 
 instance Aeson.FromJSON Moniker where
-  parseJSON = Aeson.withObject "Moniker" $ \arg -> Moniker <$> arg Aeson..: "scheme" <*> arg Aeson..: "identifier" <*> arg Aeson..: "unique" <*> arg Aeson..:! "kind"
+  parseJSON = Aeson.withObject "Moniker" $ \arg -> Moniker <$> arg Aeson..: "scheme" <*> arg Aeson..: "identifier" <*> arg Aeson..: "unique" <*> arg Language.LSP.Protocol.Types.Common..:!? "kind"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/MonikerClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/MonikerClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/MonikerClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/MonikerClientCapabilities.hs
@@ -38,4 +38,4 @@
   toJSON (MonikerClientCapabilities arg0) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON MonikerClientCapabilities where
-  parseJSON = Aeson.withObject "MonikerClientCapabilities" $ \arg -> MonikerClientCapabilities <$> arg Aeson..:! "dynamicRegistration"
+  parseJSON = Aeson.withObject "MonikerClientCapabilities" $ \arg -> MonikerClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/MonikerKind.hs b/generated/Language/LSP/Protocol/Internal/Types/MonikerKind.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/MonikerKind.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/MonikerKind.hs
@@ -42,7 +42,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum MonikerKind Data.Text.Text)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum MonikerKind)
   deriving Pretty via (ViaJSON MonikerKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum MonikerKind where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/MonikerOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/MonikerOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/MonikerOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/MonikerOptions.hs
@@ -34,4 +34,4 @@
   toJSON (MonikerOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON MonikerOptions where
-  parseJSON = Aeson.withObject "MonikerOptions" $ \arg -> MonikerOptions <$> arg Aeson..:! "workDoneProgress"
+  parseJSON = Aeson.withObject "MonikerOptions" $ \arg -> MonikerOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/MonikerParams.hs b/generated/Language/LSP/Protocol/Internal/Types/MonikerParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/MonikerParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/MonikerParams.hs
@@ -53,4 +53,4 @@
     ,"partialResultToken" Language.LSP.Protocol.Types.Common..=? arg3]
 
 instance Aeson.FromJSON MonikerParams where
-  parseJSON = Aeson.withObject "MonikerParams" $ \arg -> MonikerParams <$> arg Aeson..: "textDocument" <*> arg Aeson..: "position" <*> arg Aeson..:! "workDoneToken" <*> arg Aeson..:! "partialResultToken"
+  parseJSON = Aeson.withObject "MonikerParams" $ \arg -> MonikerParams <$> arg Aeson..: "textDocument" <*> arg Aeson..: "position" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Language.LSP.Protocol.Types.Common..:!? "partialResultToken"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/MonikerRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/MonikerRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/MonikerRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/MonikerRegistrationOptions.hs
@@ -41,4 +41,4 @@
     ,"workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON MonikerRegistrationOptions where
-  parseJSON = Aeson.withObject "MonikerRegistrationOptions" $ \arg -> MonikerRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Aeson..:! "workDoneProgress"
+  parseJSON = Aeson.withObject "MonikerRegistrationOptions" $ \arg -> MonikerRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/NotebookCell.hs b/generated/Language/LSP/Protocol/Internal/Types/NotebookCell.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/NotebookCell.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/NotebookCell.hs
@@ -63,4 +63,4 @@
     ,"executionSummary" Language.LSP.Protocol.Types.Common..=? arg3]
 
 instance Aeson.FromJSON NotebookCell where
-  parseJSON = Aeson.withObject "NotebookCell" $ \arg -> NotebookCell <$> arg Aeson..: "kind" <*> arg Aeson..: "document" <*> arg Aeson..:! "metadata" <*> arg Aeson..:! "executionSummary"
+  parseJSON = Aeson.withObject "NotebookCell" $ \arg -> NotebookCell <$> arg Aeson..: "kind" <*> arg Aeson..: "document" <*> arg Language.LSP.Protocol.Types.Common..:!? "metadata" <*> arg Language.LSP.Protocol.Types.Common..:!? "executionSummary"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/NotebookCellArrayChange.hs b/generated/Language/LSP/Protocol/Internal/Types/NotebookCellArrayChange.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/NotebookCellArrayChange.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/NotebookCellArrayChange.hs
@@ -48,4 +48,4 @@
     ,"cells" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON NotebookCellArrayChange where
-  parseJSON = Aeson.withObject "NotebookCellArrayChange" $ \arg -> NotebookCellArrayChange <$> arg Aeson..: "start" <*> arg Aeson..: "deleteCount" <*> arg Aeson..:! "cells"
+  parseJSON = Aeson.withObject "NotebookCellArrayChange" $ \arg -> NotebookCellArrayChange <$> arg Aeson..: "start" <*> arg Aeson..: "deleteCount" <*> arg Language.LSP.Protocol.Types.Common..:!? "cells"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/NotebookCellKind.hs b/generated/Language/LSP/Protocol/Internal/Types/NotebookCellKind.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/NotebookCellKind.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/NotebookCellKind.hs
@@ -37,7 +37,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum NotebookCellKind Language.LSP.Protocol.Types.Common.UInt)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum NotebookCellKind)
   deriving Pretty via (ViaJSON NotebookCellKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum NotebookCellKind where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/NotebookCellTextDocumentFilter.hs b/generated/Language/LSP/Protocol/Internal/Types/NotebookCellTextDocumentFilter.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/NotebookCellTextDocumentFilter.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/NotebookCellTextDocumentFilter.hs
@@ -50,4 +50,4 @@
     ,"language" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON NotebookCellTextDocumentFilter where
-  parseJSON = Aeson.withObject "NotebookCellTextDocumentFilter" $ \arg -> NotebookCellTextDocumentFilter <$> arg Aeson..: "notebook" <*> arg Aeson..:! "language"
+  parseJSON = Aeson.withObject "NotebookCellTextDocumentFilter" $ \arg -> NotebookCellTextDocumentFilter <$> arg Aeson..: "notebook" <*> arg Language.LSP.Protocol.Types.Common..:!? "language"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/NotebookDocument.hs b/generated/Language/LSP/Protocol/Internal/Types/NotebookDocument.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/NotebookDocument.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/NotebookDocument.hs
@@ -64,4 +64,4 @@
     ,["cells" Aeson..= arg4]]
 
 instance Aeson.FromJSON NotebookDocument where
-  parseJSON = Aeson.withObject "NotebookDocument" $ \arg -> NotebookDocument <$> arg Aeson..: "uri" <*> arg Aeson..: "notebookType" <*> arg Aeson..: "version" <*> arg Aeson..:! "metadata" <*> arg Aeson..: "cells"
+  parseJSON = Aeson.withObject "NotebookDocument" $ \arg -> NotebookDocument <$> arg Aeson..: "uri" <*> arg Aeson..: "notebookType" <*> arg Aeson..: "version" <*> arg Language.LSP.Protocol.Types.Common..:!? "metadata" <*> arg Aeson..: "cells"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/NotebookDocumentChangeEvent.hs b/generated/Language/LSP/Protocol/Internal/Types/NotebookDocumentChangeEvent.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/NotebookDocumentChangeEvent.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/NotebookDocumentChangeEvent.hs
@@ -51,4 +51,4 @@
     ,"cells" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON NotebookDocumentChangeEvent where
-  parseJSON = Aeson.withObject "NotebookDocumentChangeEvent" $ \arg -> NotebookDocumentChangeEvent <$> arg Aeson..:! "metadata" <*> arg Aeson..:! "cells"
+  parseJSON = Aeson.withObject "NotebookDocumentChangeEvent" $ \arg -> NotebookDocumentChangeEvent <$> arg Language.LSP.Protocol.Types.Common..:!? "metadata" <*> arg Language.LSP.Protocol.Types.Common..:!? "cells"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/NotebookDocumentSyncClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/NotebookDocumentSyncClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/NotebookDocumentSyncClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/NotebookDocumentSyncClientCapabilities.hs
@@ -44,4 +44,4 @@
     ,"executionSummarySupport" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON NotebookDocumentSyncClientCapabilities where
-  parseJSON = Aeson.withObject "NotebookDocumentSyncClientCapabilities" $ \arg -> NotebookDocumentSyncClientCapabilities <$> arg Aeson..:! "dynamicRegistration" <*> arg Aeson..:! "executionSummarySupport"
+  parseJSON = Aeson.withObject "NotebookDocumentSyncClientCapabilities" $ \arg -> NotebookDocumentSyncClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration" <*> arg Language.LSP.Protocol.Types.Common..:!? "executionSummarySupport"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/NotebookDocumentSyncOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/NotebookDocumentSyncOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/NotebookDocumentSyncOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/NotebookDocumentSyncOptions.hs
@@ -55,4 +55,4 @@
     ,"save" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON NotebookDocumentSyncOptions where
-  parseJSON = Aeson.withObject "NotebookDocumentSyncOptions" $ \arg -> NotebookDocumentSyncOptions <$> arg Aeson..: "notebookSelector" <*> arg Aeson..:! "save"
+  parseJSON = Aeson.withObject "NotebookDocumentSyncOptions" $ \arg -> NotebookDocumentSyncOptions <$> arg Aeson..: "notebookSelector" <*> arg Language.LSP.Protocol.Types.Common..:!? "save"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/NotebookDocumentSyncRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/NotebookDocumentSyncRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/NotebookDocumentSyncRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/NotebookDocumentSyncRegistrationOptions.hs
@@ -51,4 +51,4 @@
     ,"id" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON NotebookDocumentSyncRegistrationOptions where
-  parseJSON = Aeson.withObject "NotebookDocumentSyncRegistrationOptions" $ \arg -> NotebookDocumentSyncRegistrationOptions <$> arg Aeson..: "notebookSelector" <*> arg Aeson..:! "save" <*> arg Aeson..:! "id"
+  parseJSON = Aeson.withObject "NotebookDocumentSyncRegistrationOptions" $ \arg -> NotebookDocumentSyncRegistrationOptions <$> arg Aeson..: "notebookSelector" <*> arg Language.LSP.Protocol.Types.Common..:!? "save" <*> arg Language.LSP.Protocol.Types.Common..:!? "id"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ParameterInformation.hs b/generated/Language/LSP/Protocol/Internal/Types/ParameterInformation.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ParameterInformation.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ParameterInformation.hs
@@ -51,4 +51,4 @@
     ,"documentation" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON ParameterInformation where
-  parseJSON = Aeson.withObject "ParameterInformation" $ \arg -> ParameterInformation <$> arg Aeson..: "label" <*> arg Aeson..:! "documentation"
+  parseJSON = Aeson.withObject "ParameterInformation" $ \arg -> ParameterInformation <$> arg Aeson..: "label" <*> arg Language.LSP.Protocol.Types.Common..:!? "documentation"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/PartialResultParams.hs b/generated/Language/LSP/Protocol/Internal/Types/PartialResultParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/PartialResultParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/PartialResultParams.hs
@@ -36,4 +36,4 @@
   toJSON (PartialResultParams arg0) = Aeson.object $ concat $  ["partialResultToken" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON PartialResultParams where
-  parseJSON = Aeson.withObject "PartialResultParams" $ \arg -> PartialResultParams <$> arg Aeson..:! "partialResultToken"
+  parseJSON = Aeson.withObject "PartialResultParams" $ \arg -> PartialResultParams <$> arg Language.LSP.Protocol.Types.Common..:!? "partialResultToken"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/PositionEncodingKind.hs b/generated/Language/LSP/Protocol/Internal/Types/PositionEncodingKind.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/PositionEncodingKind.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/PositionEncodingKind.hs
@@ -50,7 +50,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON
-  , Data.String.IsString ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum PositionEncodingKind Data.Text.Text)
+  , Data.String.IsString ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum PositionEncodingKind)
   deriving Pretty via (ViaJSON PositionEncodingKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum PositionEncodingKind where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/PrepareRenameParams.hs b/generated/Language/LSP/Protocol/Internal/Types/PrepareRenameParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/PrepareRenameParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/PrepareRenameParams.hs
@@ -47,4 +47,4 @@
     ,"workDoneToken" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON PrepareRenameParams where
-  parseJSON = Aeson.withObject "PrepareRenameParams" $ \arg -> PrepareRenameParams <$> arg Aeson..: "textDocument" <*> arg Aeson..: "position" <*> arg Aeson..:! "workDoneToken"
+  parseJSON = Aeson.withObject "PrepareRenameParams" $ \arg -> PrepareRenameParams <$> arg Aeson..: "textDocument" <*> arg Aeson..: "position" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/PrepareSupportDefaultBehavior.hs b/generated/Language/LSP/Protocol/Internal/Types/PrepareSupportDefaultBehavior.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/PrepareSupportDefaultBehavior.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/PrepareSupportDefaultBehavior.hs
@@ -32,7 +32,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum PrepareSupportDefaultBehavior Language.LSP.Protocol.Types.Common.UInt)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum PrepareSupportDefaultBehavior)
   deriving Pretty via (ViaJSON PrepareSupportDefaultBehavior)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum PrepareSupportDefaultBehavior where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/PublishDiagnosticsClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/PublishDiagnosticsClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/PublishDiagnosticsClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/PublishDiagnosticsClientCapabilities.hs
@@ -68,4 +68,4 @@
     ,"dataSupport" Language.LSP.Protocol.Types.Common..=? arg4]
 
 instance Aeson.FromJSON PublishDiagnosticsClientCapabilities where
-  parseJSON = Aeson.withObject "PublishDiagnosticsClientCapabilities" $ \arg -> PublishDiagnosticsClientCapabilities <$> arg Aeson..:! "relatedInformation" <*> arg Aeson..:! "tagSupport" <*> arg Aeson..:! "versionSupport" <*> arg Aeson..:! "codeDescriptionSupport" <*> arg Aeson..:! "dataSupport"
+  parseJSON = Aeson.withObject "PublishDiagnosticsClientCapabilities" $ \arg -> PublishDiagnosticsClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "relatedInformation" <*> arg Language.LSP.Protocol.Types.Common..:!? "tagSupport" <*> arg Language.LSP.Protocol.Types.Common..:!? "versionSupport" <*> arg Language.LSP.Protocol.Types.Common..:!? "codeDescriptionSupport" <*> arg Language.LSP.Protocol.Types.Common..:!? "dataSupport"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/PublishDiagnosticsParams.hs b/generated/Language/LSP/Protocol/Internal/Types/PublishDiagnosticsParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/PublishDiagnosticsParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/PublishDiagnosticsParams.hs
@@ -48,4 +48,4 @@
     ,["diagnostics" Aeson..= arg2]]
 
 instance Aeson.FromJSON PublishDiagnosticsParams where
-  parseJSON = Aeson.withObject "PublishDiagnosticsParams" $ \arg -> PublishDiagnosticsParams <$> arg Aeson..: "uri" <*> arg Aeson..:! "version" <*> arg Aeson..: "diagnostics"
+  parseJSON = Aeson.withObject "PublishDiagnosticsParams" $ \arg -> PublishDiagnosticsParams <$> arg Aeson..: "uri" <*> arg Language.LSP.Protocol.Types.Common..:!? "version" <*> arg Aeson..: "diagnostics"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ReferenceClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/ReferenceClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ReferenceClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ReferenceClientCapabilities.hs
@@ -34,4 +34,4 @@
   toJSON (ReferenceClientCapabilities arg0) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON ReferenceClientCapabilities where
-  parseJSON = Aeson.withObject "ReferenceClientCapabilities" $ \arg -> ReferenceClientCapabilities <$> arg Aeson..:! "dynamicRegistration"
+  parseJSON = Aeson.withObject "ReferenceClientCapabilities" $ \arg -> ReferenceClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ReferenceOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/ReferenceOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ReferenceOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ReferenceOptions.hs
@@ -34,4 +34,4 @@
   toJSON (ReferenceOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON ReferenceOptions where
-  parseJSON = Aeson.withObject "ReferenceOptions" $ \arg -> ReferenceOptions <$> arg Aeson..:! "workDoneProgress"
+  parseJSON = Aeson.withObject "ReferenceOptions" $ \arg -> ReferenceOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ReferenceParams.hs b/generated/Language/LSP/Protocol/Internal/Types/ReferenceParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ReferenceParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ReferenceParams.hs
@@ -59,4 +59,4 @@
     ,["context" Aeson..= arg4]]
 
 instance Aeson.FromJSON ReferenceParams where
-  parseJSON = Aeson.withObject "ReferenceParams" $ \arg -> ReferenceParams <$> arg Aeson..: "textDocument" <*> arg Aeson..: "position" <*> arg Aeson..:! "workDoneToken" <*> arg Aeson..:! "partialResultToken" <*> arg Aeson..: "context"
+  parseJSON = Aeson.withObject "ReferenceParams" $ \arg -> ReferenceParams <$> arg Aeson..: "textDocument" <*> arg Aeson..: "position" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Language.LSP.Protocol.Types.Common..:!? "partialResultToken" <*> arg Aeson..: "context"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ReferenceRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/ReferenceRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ReferenceRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ReferenceRegistrationOptions.hs
@@ -41,4 +41,4 @@
     ,"workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON ReferenceRegistrationOptions where
-  parseJSON = Aeson.withObject "ReferenceRegistrationOptions" $ \arg -> ReferenceRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Aeson..:! "workDoneProgress"
+  parseJSON = Aeson.withObject "ReferenceRegistrationOptions" $ \arg -> ReferenceRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/Registration.hs b/generated/Language/LSP/Protocol/Internal/Types/Registration.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/Registration.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/Registration.hs
@@ -47,4 +47,4 @@
     ,"registerOptions" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON Registration where
-  parseJSON = Aeson.withObject "Registration" $ \arg -> Registration <$> arg Aeson..: "id" <*> arg Aeson..: "method" <*> arg Aeson..:! "registerOptions"
+  parseJSON = Aeson.withObject "Registration" $ \arg -> Registration <$> arg Aeson..: "id" <*> arg Aeson..: "method" <*> arg Language.LSP.Protocol.Types.Common..:!? "registerOptions"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/RegularExpressionsClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/RegularExpressionsClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/RegularExpressionsClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/RegularExpressionsClientCapabilities.hs
@@ -42,4 +42,4 @@
     ,"version" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON RegularExpressionsClientCapabilities where
-  parseJSON = Aeson.withObject "RegularExpressionsClientCapabilities" $ \arg -> RegularExpressionsClientCapabilities <$> arg Aeson..: "engine" <*> arg Aeson..:! "version"
+  parseJSON = Aeson.withObject "RegularExpressionsClientCapabilities" $ \arg -> RegularExpressionsClientCapabilities <$> arg Aeson..: "engine" <*> arg Language.LSP.Protocol.Types.Common..:!? "version"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/RelatedFullDocumentDiagnosticReport.hs b/generated/Language/LSP/Protocol/Internal/Types/RelatedFullDocumentDiagnosticReport.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/RelatedFullDocumentDiagnosticReport.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/RelatedFullDocumentDiagnosticReport.hs
@@ -66,4 +66,4 @@
     ,"relatedDocuments" Language.LSP.Protocol.Types.Common..=? arg3]
 
 instance Aeson.FromJSON RelatedFullDocumentDiagnosticReport where
-  parseJSON = Aeson.withObject "RelatedFullDocumentDiagnosticReport" $ \arg -> RelatedFullDocumentDiagnosticReport <$> arg Aeson..: "kind" <*> arg Aeson..:! "resultId" <*> arg Aeson..: "items" <*> arg Aeson..:! "relatedDocuments"
+  parseJSON = Aeson.withObject "RelatedFullDocumentDiagnosticReport" $ \arg -> RelatedFullDocumentDiagnosticReport <$> arg Aeson..: "kind" <*> arg Language.LSP.Protocol.Types.Common..:!? "resultId" <*> arg Aeson..: "items" <*> arg Language.LSP.Protocol.Types.Common..:!? "relatedDocuments"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/RelatedUnchangedDocumentDiagnosticReport.hs b/generated/Language/LSP/Protocol/Internal/Types/RelatedUnchangedDocumentDiagnosticReport.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/RelatedUnchangedDocumentDiagnosticReport.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/RelatedUnchangedDocumentDiagnosticReport.hs
@@ -62,4 +62,4 @@
     ,"relatedDocuments" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON RelatedUnchangedDocumentDiagnosticReport where
-  parseJSON = Aeson.withObject "RelatedUnchangedDocumentDiagnosticReport" $ \arg -> RelatedUnchangedDocumentDiagnosticReport <$> arg Aeson..: "kind" <*> arg Aeson..: "resultId" <*> arg Aeson..:! "relatedDocuments"
+  parseJSON = Aeson.withObject "RelatedUnchangedDocumentDiagnosticReport" $ \arg -> RelatedUnchangedDocumentDiagnosticReport <$> arg Aeson..: "kind" <*> arg Aeson..: "resultId" <*> arg Language.LSP.Protocol.Types.Common..:!? "relatedDocuments"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/RenameClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/RenameClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/RenameClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/RenameClientCapabilities.hs
@@ -64,4 +64,4 @@
     ,"honorsChangeAnnotations" Language.LSP.Protocol.Types.Common..=? arg3]
 
 instance Aeson.FromJSON RenameClientCapabilities where
-  parseJSON = Aeson.withObject "RenameClientCapabilities" $ \arg -> RenameClientCapabilities <$> arg Aeson..:! "dynamicRegistration" <*> arg Aeson..:! "prepareSupport" <*> arg Aeson..:! "prepareSupportDefaultBehavior" <*> arg Aeson..:! "honorsChangeAnnotations"
+  parseJSON = Aeson.withObject "RenameClientCapabilities" $ \arg -> RenameClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration" <*> arg Language.LSP.Protocol.Types.Common..:!? "prepareSupport" <*> arg Language.LSP.Protocol.Types.Common..:!? "prepareSupportDefaultBehavior" <*> arg Language.LSP.Protocol.Types.Common..:!? "honorsChangeAnnotations"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/RenameFile.hs b/generated/Language/LSP/Protocol/Internal/Types/RenameFile.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/RenameFile.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/RenameFile.hs
@@ -60,4 +60,4 @@
     ,"options" Language.LSP.Protocol.Types.Common..=? arg4]
 
 instance Aeson.FromJSON RenameFile where
-  parseJSON = Aeson.withObject "RenameFile" $ \arg -> RenameFile <$> arg Aeson..:! "annotationId" <*> arg Aeson..: "kind" <*> arg Aeson..: "oldUri" <*> arg Aeson..: "newUri" <*> arg Aeson..:! "options"
+  parseJSON = Aeson.withObject "RenameFile" $ \arg -> RenameFile <$> arg Language.LSP.Protocol.Types.Common..:!? "annotationId" <*> arg Aeson..: "kind" <*> arg Aeson..: "oldUri" <*> arg Aeson..: "newUri" <*> arg Language.LSP.Protocol.Types.Common..:!? "options"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/RenameFileOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/RenameFileOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/RenameFileOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/RenameFileOptions.hs
@@ -39,4 +39,4 @@
     ,"ignoreIfExists" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON RenameFileOptions where
-  parseJSON = Aeson.withObject "RenameFileOptions" $ \arg -> RenameFileOptions <$> arg Aeson..:! "overwrite" <*> arg Aeson..:! "ignoreIfExists"
+  parseJSON = Aeson.withObject "RenameFileOptions" $ \arg -> RenameFileOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "overwrite" <*> arg Language.LSP.Protocol.Types.Common..:!? "ignoreIfExists"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/RenameOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/RenameOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/RenameOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/RenameOptions.hs
@@ -41,4 +41,4 @@
     ,"prepareProvider" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON RenameOptions where
-  parseJSON = Aeson.withObject "RenameOptions" $ \arg -> RenameOptions <$> arg Aeson..:! "workDoneProgress" <*> arg Aeson..:! "prepareProvider"
+  parseJSON = Aeson.withObject "RenameOptions" $ \arg -> RenameOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Language.LSP.Protocol.Types.Common..:!? "prepareProvider"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/RenameParams.hs b/generated/Language/LSP/Protocol/Internal/Types/RenameParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/RenameParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/RenameParams.hs
@@ -55,4 +55,4 @@
     ,["newName" Aeson..= arg3]]
 
 instance Aeson.FromJSON RenameParams where
-  parseJSON = Aeson.withObject "RenameParams" $ \arg -> RenameParams <$> arg Aeson..:! "workDoneToken" <*> arg Aeson..: "textDocument" <*> arg Aeson..: "position" <*> arg Aeson..: "newName"
+  parseJSON = Aeson.withObject "RenameParams" $ \arg -> RenameParams <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Aeson..: "textDocument" <*> arg Aeson..: "position" <*> arg Aeson..: "newName"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/RenameRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/RenameRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/RenameRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/RenameRegistrationOptions.hs
@@ -48,4 +48,4 @@
     ,"prepareProvider" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON RenameRegistrationOptions where
-  parseJSON = Aeson.withObject "RenameRegistrationOptions" $ \arg -> RenameRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Aeson..:! "workDoneProgress" <*> arg Aeson..:! "prepareProvider"
+  parseJSON = Aeson.withObject "RenameRegistrationOptions" $ \arg -> RenameRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Language.LSP.Protocol.Types.Common..:!? "prepareProvider"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ResourceOperation.hs b/generated/Language/LSP/Protocol/Internal/Types/ResourceOperation.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ResourceOperation.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ResourceOperation.hs
@@ -43,4 +43,4 @@
     ,"annotationId" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON ResourceOperation where
-  parseJSON = Aeson.withObject "ResourceOperation" $ \arg -> ResourceOperation <$> arg Aeson..: "kind" <*> arg Aeson..:! "annotationId"
+  parseJSON = Aeson.withObject "ResourceOperation" $ \arg -> ResourceOperation <$> arg Aeson..: "kind" <*> arg Language.LSP.Protocol.Types.Common..:!? "annotationId"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ResourceOperationKind.hs b/generated/Language/LSP/Protocol/Internal/Types/ResourceOperationKind.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ResourceOperationKind.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ResourceOperationKind.hs
@@ -39,7 +39,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum ResourceOperationKind Data.Text.Text)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum ResourceOperationKind)
   deriving Pretty via (ViaJSON ResourceOperationKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum ResourceOperationKind where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SaveOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/SaveOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SaveOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SaveOptions.hs
@@ -34,4 +34,4 @@
   toJSON (SaveOptions arg0) = Aeson.object $ concat $  ["includeText" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON SaveOptions where
-  parseJSON = Aeson.withObject "SaveOptions" $ \arg -> SaveOptions <$> arg Aeson..:! "includeText"
+  parseJSON = Aeson.withObject "SaveOptions" $ \arg -> SaveOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "includeText"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SelectionRange.hs b/generated/Language/LSP/Protocol/Internal/Types/SelectionRange.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SelectionRange.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SelectionRange.hs
@@ -41,4 +41,4 @@
     ,"parent" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON SelectionRange where
-  parseJSON = Aeson.withObject "SelectionRange" $ \arg -> SelectionRange <$> arg Aeson..: "range" <*> arg Aeson..:! "parent"
+  parseJSON = Aeson.withObject "SelectionRange" $ \arg -> SelectionRange <$> arg Aeson..: "range" <*> arg Language.LSP.Protocol.Types.Common..:!? "parent"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SelectionRangeClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/SelectionRangeClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SelectionRangeClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SelectionRangeClientCapabilities.hs
@@ -36,4 +36,4 @@
   toJSON (SelectionRangeClientCapabilities arg0) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON SelectionRangeClientCapabilities where
-  parseJSON = Aeson.withObject "SelectionRangeClientCapabilities" $ \arg -> SelectionRangeClientCapabilities <$> arg Aeson..:! "dynamicRegistration"
+  parseJSON = Aeson.withObject "SelectionRangeClientCapabilities" $ \arg -> SelectionRangeClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SelectionRangeOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/SelectionRangeOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SelectionRangeOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SelectionRangeOptions.hs
@@ -34,4 +34,4 @@
   toJSON (SelectionRangeOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON SelectionRangeOptions where
-  parseJSON = Aeson.withObject "SelectionRangeOptions" $ \arg -> SelectionRangeOptions <$> arg Aeson..:! "workDoneProgress"
+  parseJSON = Aeson.withObject "SelectionRangeOptions" $ \arg -> SelectionRangeOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SelectionRangeParams.hs b/generated/Language/LSP/Protocol/Internal/Types/SelectionRangeParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SelectionRangeParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SelectionRangeParams.hs
@@ -53,4 +53,4 @@
     ,["positions" Aeson..= arg3]]
 
 instance Aeson.FromJSON SelectionRangeParams where
-  parseJSON = Aeson.withObject "SelectionRangeParams" $ \arg -> SelectionRangeParams <$> arg Aeson..:! "workDoneToken" <*> arg Aeson..:! "partialResultToken" <*> arg Aeson..: "textDocument" <*> arg Aeson..: "positions"
+  parseJSON = Aeson.withObject "SelectionRangeParams" $ \arg -> SelectionRangeParams <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Language.LSP.Protocol.Types.Common..:!? "partialResultToken" <*> arg Aeson..: "textDocument" <*> arg Aeson..: "positions"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SelectionRangeRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/SelectionRangeRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SelectionRangeRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SelectionRangeRegistrationOptions.hs
@@ -48,4 +48,4 @@
     ,"id" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON SelectionRangeRegistrationOptions where
-  parseJSON = Aeson.withObject "SelectionRangeRegistrationOptions" $ \arg -> SelectionRangeRegistrationOptions <$> arg Aeson..:! "workDoneProgress" <*> arg Aeson..: "documentSelector" <*> arg Aeson..:! "id"
+  parseJSON = Aeson.withObject "SelectionRangeRegistrationOptions" $ \arg -> SelectionRangeRegistrationOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Aeson..: "documentSelector" <*> arg Language.LSP.Protocol.Types.Common..:!? "id"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SemanticTokenModifiers.hs b/generated/Language/LSP/Protocol/Internal/Types/SemanticTokenModifiers.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SemanticTokenModifiers.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SemanticTokenModifiers.hs
@@ -73,7 +73,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON
-  , Data.String.IsString ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum SemanticTokenModifiers Data.Text.Text)
+  , Data.String.IsString ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum SemanticTokenModifiers)
   deriving Pretty via (ViaJSON SemanticTokenModifiers)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum SemanticTokenModifiers where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SemanticTokenTypes.hs b/generated/Language/LSP/Protocol/Internal/Types/SemanticTokenTypes.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SemanticTokenTypes.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SemanticTokenTypes.hs
@@ -126,7 +126,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON
-  , Data.String.IsString ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum SemanticTokenTypes Data.Text.Text)
+  , Data.String.IsString ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum SemanticTokenTypes)
   deriving Pretty via (ViaJSON SemanticTokenTypes)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum SemanticTokenTypes where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SemanticTokens.hs b/generated/Language/LSP/Protocol/Internal/Types/SemanticTokens.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SemanticTokens.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SemanticTokens.hs
@@ -43,4 +43,4 @@
     ,["data" Aeson..= arg1]]
 
 instance Aeson.FromJSON SemanticTokens where
-  parseJSON = Aeson.withObject "SemanticTokens" $ \arg -> SemanticTokens <$> arg Aeson..:! "resultId" <*> arg Aeson..: "data"
+  parseJSON = Aeson.withObject "SemanticTokens" $ \arg -> SemanticTokens <$> arg Language.LSP.Protocol.Types.Common..:!? "resultId" <*> arg Aeson..: "data"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensClientCapabilities.hs
@@ -100,4 +100,4 @@
     ,"augmentsSyntaxTokens" Language.LSP.Protocol.Types.Common..=? arg8]
 
 instance Aeson.FromJSON SemanticTokensClientCapabilities where
-  parseJSON = Aeson.withObject "SemanticTokensClientCapabilities" $ \arg -> SemanticTokensClientCapabilities <$> arg Aeson..:! "dynamicRegistration" <*> arg Aeson..: "requests" <*> arg Aeson..: "tokenTypes" <*> arg Aeson..: "tokenModifiers" <*> arg Aeson..: "formats" <*> arg Aeson..:! "overlappingTokenSupport" <*> arg Aeson..:! "multilineTokenSupport" <*> arg Aeson..:! "serverCancelSupport" <*> arg Aeson..:! "augmentsSyntaxTokens"
+  parseJSON = Aeson.withObject "SemanticTokensClientCapabilities" $ \arg -> SemanticTokensClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration" <*> arg Aeson..: "requests" <*> arg Aeson..: "tokenTypes" <*> arg Aeson..: "tokenModifiers" <*> arg Aeson..: "formats" <*> arg Language.LSP.Protocol.Types.Common..:!? "overlappingTokenSupport" <*> arg Language.LSP.Protocol.Types.Common..:!? "multilineTokenSupport" <*> arg Language.LSP.Protocol.Types.Common..:!? "serverCancelSupport" <*> arg Language.LSP.Protocol.Types.Common..:!? "augmentsSyntaxTokens"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensDelta.hs b/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensDelta.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensDelta.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensDelta.hs
@@ -41,4 +41,4 @@
     ,["edits" Aeson..= arg1]]
 
 instance Aeson.FromJSON SemanticTokensDelta where
-  parseJSON = Aeson.withObject "SemanticTokensDelta" $ \arg -> SemanticTokensDelta <$> arg Aeson..:! "resultId" <*> arg Aeson..: "edits"
+  parseJSON = Aeson.withObject "SemanticTokensDelta" $ \arg -> SemanticTokensDelta <$> arg Language.LSP.Protocol.Types.Common..:!? "resultId" <*> arg Aeson..: "edits"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensDeltaParams.hs b/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensDeltaParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensDeltaParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensDeltaParams.hs
@@ -54,4 +54,4 @@
     ,["previousResultId" Aeson..= arg3]]
 
 instance Aeson.FromJSON SemanticTokensDeltaParams where
-  parseJSON = Aeson.withObject "SemanticTokensDeltaParams" $ \arg -> SemanticTokensDeltaParams <$> arg Aeson..:! "workDoneToken" <*> arg Aeson..:! "partialResultToken" <*> arg Aeson..: "textDocument" <*> arg Aeson..: "previousResultId"
+  parseJSON = Aeson.withObject "SemanticTokensDeltaParams" $ \arg -> SemanticTokensDeltaParams <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Language.LSP.Protocol.Types.Common..:!? "partialResultToken" <*> arg Aeson..: "textDocument" <*> arg Aeson..: "previousResultId"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensEdit.hs b/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensEdit.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensEdit.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensEdit.hs
@@ -44,4 +44,4 @@
     ,"data" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON SemanticTokensEdit where
-  parseJSON = Aeson.withObject "SemanticTokensEdit" $ \arg -> SemanticTokensEdit <$> arg Aeson..: "start" <*> arg Aeson..: "deleteCount" <*> arg Aeson..:! "data"
+  parseJSON = Aeson.withObject "SemanticTokensEdit" $ \arg -> SemanticTokensEdit <$> arg Aeson..: "start" <*> arg Aeson..: "deleteCount" <*> arg Language.LSP.Protocol.Types.Common..:!? "data"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensOptions.hs
@@ -52,4 +52,4 @@
     ,"full" Language.LSP.Protocol.Types.Common..=? arg3]
 
 instance Aeson.FromJSON SemanticTokensOptions where
-  parseJSON = Aeson.withObject "SemanticTokensOptions" $ \arg -> SemanticTokensOptions <$> arg Aeson..:! "workDoneProgress" <*> arg Aeson..: "legend" <*> arg Aeson..:! "range" <*> arg Aeson..:! "full"
+  parseJSON = Aeson.withObject "SemanticTokensOptions" $ \arg -> SemanticTokensOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Aeson..: "legend" <*> arg Language.LSP.Protocol.Types.Common..:!? "range" <*> arg Language.LSP.Protocol.Types.Common..:!? "full"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensParams.hs b/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensParams.hs
@@ -47,4 +47,4 @@
     ,["textDocument" Aeson..= arg2]]
 
 instance Aeson.FromJSON SemanticTokensParams where
-  parseJSON = Aeson.withObject "SemanticTokensParams" $ \arg -> SemanticTokensParams <$> arg Aeson..:! "workDoneToken" <*> arg Aeson..:! "partialResultToken" <*> arg Aeson..: "textDocument"
+  parseJSON = Aeson.withObject "SemanticTokensParams" $ \arg -> SemanticTokensParams <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Language.LSP.Protocol.Types.Common..:!? "partialResultToken" <*> arg Aeson..: "textDocument"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensRangeParams.hs b/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensRangeParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensRangeParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensRangeParams.hs
@@ -53,4 +53,4 @@
     ,["range" Aeson..= arg3]]
 
 instance Aeson.FromJSON SemanticTokensRangeParams where
-  parseJSON = Aeson.withObject "SemanticTokensRangeParams" $ \arg -> SemanticTokensRangeParams <$> arg Aeson..:! "workDoneToken" <*> arg Aeson..:! "partialResultToken" <*> arg Aeson..: "textDocument" <*> arg Aeson..: "range"
+  parseJSON = Aeson.withObject "SemanticTokensRangeParams" $ \arg -> SemanticTokensRangeParams <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Language.LSP.Protocol.Types.Common..:!? "partialResultToken" <*> arg Aeson..: "textDocument" <*> arg Aeson..: "range"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensRegistrationOptions.hs
@@ -66,4 +66,4 @@
     ,"id" Language.LSP.Protocol.Types.Common..=? arg5]
 
 instance Aeson.FromJSON SemanticTokensRegistrationOptions where
-  parseJSON = Aeson.withObject "SemanticTokensRegistrationOptions" $ \arg -> SemanticTokensRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Aeson..:! "workDoneProgress" <*> arg Aeson..: "legend" <*> arg Aeson..:! "range" <*> arg Aeson..:! "full" <*> arg Aeson..:! "id"
+  parseJSON = Aeson.withObject "SemanticTokensRegistrationOptions" $ \arg -> SemanticTokensRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Aeson..: "legend" <*> arg Language.LSP.Protocol.Types.Common..:!? "range" <*> arg Language.LSP.Protocol.Types.Common..:!? "full" <*> arg Language.LSP.Protocol.Types.Common..:!? "id"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensWorkspaceClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensWorkspaceClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensWorkspaceClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensWorkspaceClientCapabilities.hs
@@ -40,4 +40,4 @@
   toJSON (SemanticTokensWorkspaceClientCapabilities arg0) = Aeson.object $ concat $  ["refreshSupport" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON SemanticTokensWorkspaceClientCapabilities where
-  parseJSON = Aeson.withObject "SemanticTokensWorkspaceClientCapabilities" $ \arg -> SemanticTokensWorkspaceClientCapabilities <$> arg Aeson..:! "refreshSupport"
+  parseJSON = Aeson.withObject "SemanticTokensWorkspaceClientCapabilities" $ \arg -> SemanticTokensWorkspaceClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "refreshSupport"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ServerCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/ServerCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ServerCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ServerCapabilities.hs
@@ -290,4 +290,4 @@
     ,"experimental" Language.LSP.Protocol.Types.Common..=? arg34]
 
 instance Aeson.FromJSON ServerCapabilities where
-  parseJSON = Aeson.withObject "ServerCapabilities" $ \arg -> ServerCapabilities <$> arg Aeson..:! "positionEncoding" <*> arg Aeson..:! "textDocumentSync" <*> arg Aeson..:! "notebookDocumentSync" <*> arg Aeson..:! "completionProvider" <*> arg Aeson..:! "hoverProvider" <*> arg Aeson..:! "signatureHelpProvider" <*> arg Aeson..:! "declarationProvider" <*> arg Aeson..:! "definitionProvider" <*> arg Aeson..:! "typeDefinitionProvider" <*> arg Aeson..:! "implementationProvider" <*> arg Aeson..:! "referencesProvider" <*> arg Aeson..:! "documentHighlightProvider" <*> arg Aeson..:! "documentSymbolProvider" <*> arg Aeson..:! "codeActionProvider" <*> arg Aeson..:! "codeLensProvider" <*> arg Aeson..:! "documentLinkProvider" <*> arg Aeson..:! "colorProvider" <*> arg Aeson..:! "workspaceSymbolProvider" <*> arg Aeson..:! "documentFormattingProvider" <*> arg Aeson..:! "documentRangeFormattingProvider" <*> arg Aeson..:! "documentOnTypeFormattingProvider" <*> arg Aeson..:! "renameProvider" <*> arg Aeson..:! "foldingRangeProvider" <*> arg Aeson..:! "selectionRangeProvider" <*> arg Aeson..:! "executeCommandProvider" <*> arg Aeson..:! "callHierarchyProvider" <*> arg Aeson..:! "linkedEditingRangeProvider" <*> arg Aeson..:! "semanticTokensProvider" <*> arg Aeson..:! "monikerProvider" <*> arg Aeson..:! "typeHierarchyProvider" <*> arg Aeson..:! "inlineValueProvider" <*> arg Aeson..:! "inlayHintProvider" <*> arg Aeson..:! "diagnosticProvider" <*> arg Aeson..:! "workspace" <*> arg Aeson..:! "experimental"
+  parseJSON = Aeson.withObject "ServerCapabilities" $ \arg -> ServerCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "positionEncoding" <*> arg Language.LSP.Protocol.Types.Common..:!? "textDocumentSync" <*> arg Language.LSP.Protocol.Types.Common..:!? "notebookDocumentSync" <*> arg Language.LSP.Protocol.Types.Common..:!? "completionProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "hoverProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "signatureHelpProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "declarationProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "definitionProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "typeDefinitionProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "implementationProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "referencesProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "documentHighlightProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "documentSymbolProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "codeActionProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "codeLensProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "documentLinkProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "colorProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "workspaceSymbolProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "documentFormattingProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "documentRangeFormattingProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "documentOnTypeFormattingProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "renameProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "foldingRangeProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "selectionRangeProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "executeCommandProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "callHierarchyProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "linkedEditingRangeProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "semanticTokensProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "monikerProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "typeHierarchyProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "inlineValueProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "inlayHintProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "diagnosticProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "workspace" <*> arg Language.LSP.Protocol.Types.Common..:!? "experimental"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ShowDocumentParams.hs b/generated/Language/LSP/Protocol/Internal/Types/ShowDocumentParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ShowDocumentParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ShowDocumentParams.hs
@@ -61,4 +61,4 @@
     ,"selection" Language.LSP.Protocol.Types.Common..=? arg3]
 
 instance Aeson.FromJSON ShowDocumentParams where
-  parseJSON = Aeson.withObject "ShowDocumentParams" $ \arg -> ShowDocumentParams <$> arg Aeson..: "uri" <*> arg Aeson..:! "external" <*> arg Aeson..:! "takeFocus" <*> arg Aeson..:! "selection"
+  parseJSON = Aeson.withObject "ShowDocumentParams" $ \arg -> ShowDocumentParams <$> arg Aeson..: "uri" <*> arg Language.LSP.Protocol.Types.Common..:!? "external" <*> arg Language.LSP.Protocol.Types.Common..:!? "takeFocus" <*> arg Language.LSP.Protocol.Types.Common..:!? "selection"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ShowMessageRequestClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/ShowMessageRequestClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ShowMessageRequestClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ShowMessageRequestClientCapabilities.hs
@@ -35,4 +35,4 @@
   toJSON (ShowMessageRequestClientCapabilities arg0) = Aeson.object $ concat $  ["messageActionItem" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON ShowMessageRequestClientCapabilities where
-  parseJSON = Aeson.withObject "ShowMessageRequestClientCapabilities" $ \arg -> ShowMessageRequestClientCapabilities <$> arg Aeson..:! "messageActionItem"
+  parseJSON = Aeson.withObject "ShowMessageRequestClientCapabilities" $ \arg -> ShowMessageRequestClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "messageActionItem"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ShowMessageRequestParams.hs b/generated/Language/LSP/Protocol/Internal/Types/ShowMessageRequestParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ShowMessageRequestParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ShowMessageRequestParams.hs
@@ -47,4 +47,4 @@
     ,"actions" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON ShowMessageRequestParams where
-  parseJSON = Aeson.withObject "ShowMessageRequestParams" $ \arg -> ShowMessageRequestParams <$> arg Aeson..: "type" <*> arg Aeson..: "message" <*> arg Aeson..:! "actions"
+  parseJSON = Aeson.withObject "ShowMessageRequestParams" $ \arg -> ShowMessageRequestParams <$> arg Aeson..: "type" <*> arg Aeson..: "message" <*> arg Language.LSP.Protocol.Types.Common..:!? "actions"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SignatureHelp.hs b/generated/Language/LSP/Protocol/Internal/Types/SignatureHelp.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SignatureHelp.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SignatureHelp.hs
@@ -61,4 +61,4 @@
     ,"activeParameter" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON SignatureHelp where
-  parseJSON = Aeson.withObject "SignatureHelp" $ \arg -> SignatureHelp <$> arg Aeson..: "signatures" <*> arg Aeson..:! "activeSignature" <*> arg Aeson..:! "activeParameter"
+  parseJSON = Aeson.withObject "SignatureHelp" $ \arg -> SignatureHelp <$> arg Aeson..: "signatures" <*> arg Language.LSP.Protocol.Types.Common..:!? "activeSignature" <*> arg Language.LSP.Protocol.Types.Common..:!? "activeParameter"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SignatureHelpClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/SignatureHelpClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SignatureHelpClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SignatureHelpClientCapabilities.hs
@@ -52,4 +52,4 @@
     ,"contextSupport" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON SignatureHelpClientCapabilities where
-  parseJSON = Aeson.withObject "SignatureHelpClientCapabilities" $ \arg -> SignatureHelpClientCapabilities <$> arg Aeson..:! "dynamicRegistration" <*> arg Aeson..:! "signatureInformation" <*> arg Aeson..:! "contextSupport"
+  parseJSON = Aeson.withObject "SignatureHelpClientCapabilities" $ \arg -> SignatureHelpClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration" <*> arg Language.LSP.Protocol.Types.Common..:!? "signatureInformation" <*> arg Language.LSP.Protocol.Types.Common..:!? "contextSupport"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SignatureHelpContext.hs b/generated/Language/LSP/Protocol/Internal/Types/SignatureHelpContext.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SignatureHelpContext.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SignatureHelpContext.hs
@@ -62,4 +62,4 @@
     ,"activeSignatureHelp" Language.LSP.Protocol.Types.Common..=? arg3]
 
 instance Aeson.FromJSON SignatureHelpContext where
-  parseJSON = Aeson.withObject "SignatureHelpContext" $ \arg -> SignatureHelpContext <$> arg Aeson..: "triggerKind" <*> arg Aeson..:! "triggerCharacter" <*> arg Aeson..: "isRetrigger" <*> arg Aeson..:! "activeSignatureHelp"
+  parseJSON = Aeson.withObject "SignatureHelpContext" $ \arg -> SignatureHelpContext <$> arg Aeson..: "triggerKind" <*> arg Language.LSP.Protocol.Types.Common..:!? "triggerCharacter" <*> arg Aeson..: "isRetrigger" <*> arg Language.LSP.Protocol.Types.Common..:!? "activeSignatureHelp"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SignatureHelpOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/SignatureHelpOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SignatureHelpOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SignatureHelpOptions.hs
@@ -50,4 +50,4 @@
     ,"retriggerCharacters" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON SignatureHelpOptions where
-  parseJSON = Aeson.withObject "SignatureHelpOptions" $ \arg -> SignatureHelpOptions <$> arg Aeson..:! "workDoneProgress" <*> arg Aeson..:! "triggerCharacters" <*> arg Aeson..:! "retriggerCharacters"
+  parseJSON = Aeson.withObject "SignatureHelpOptions" $ \arg -> SignatureHelpOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Language.LSP.Protocol.Types.Common..:!? "triggerCharacters" <*> arg Language.LSP.Protocol.Types.Common..:!? "retriggerCharacters"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SignatureHelpParams.hs b/generated/Language/LSP/Protocol/Internal/Types/SignatureHelpParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SignatureHelpParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SignatureHelpParams.hs
@@ -56,4 +56,4 @@
     ,"context" Language.LSP.Protocol.Types.Common..=? arg3]
 
 instance Aeson.FromJSON SignatureHelpParams where
-  parseJSON = Aeson.withObject "SignatureHelpParams" $ \arg -> SignatureHelpParams <$> arg Aeson..: "textDocument" <*> arg Aeson..: "position" <*> arg Aeson..:! "workDoneToken" <*> arg Aeson..:! "context"
+  parseJSON = Aeson.withObject "SignatureHelpParams" $ \arg -> SignatureHelpParams <$> arg Aeson..: "textDocument" <*> arg Aeson..: "position" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Language.LSP.Protocol.Types.Common..:!? "context"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SignatureHelpRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/SignatureHelpRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SignatureHelpRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SignatureHelpRegistrationOptions.hs
@@ -57,4 +57,4 @@
     ,"retriggerCharacters" Language.LSP.Protocol.Types.Common..=? arg3]
 
 instance Aeson.FromJSON SignatureHelpRegistrationOptions where
-  parseJSON = Aeson.withObject "SignatureHelpRegistrationOptions" $ \arg -> SignatureHelpRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Aeson..:! "workDoneProgress" <*> arg Aeson..:! "triggerCharacters" <*> arg Aeson..:! "retriggerCharacters"
+  parseJSON = Aeson.withObject "SignatureHelpRegistrationOptions" $ \arg -> SignatureHelpRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Language.LSP.Protocol.Types.Common..:!? "triggerCharacters" <*> arg Language.LSP.Protocol.Types.Common..:!? "retriggerCharacters"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SignatureHelpTriggerKind.hs b/generated/Language/LSP/Protocol/Internal/Types/SignatureHelpTriggerKind.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SignatureHelpTriggerKind.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SignatureHelpTriggerKind.hs
@@ -41,7 +41,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum SignatureHelpTriggerKind Language.LSP.Protocol.Types.Common.UInt)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum SignatureHelpTriggerKind)
   deriving Pretty via (ViaJSON SignatureHelpTriggerKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum SignatureHelpTriggerKind where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SignatureInformation.hs b/generated/Language/LSP/Protocol/Internal/Types/SignatureInformation.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SignatureInformation.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SignatureInformation.hs
@@ -60,4 +60,4 @@
     ,"activeParameter" Language.LSP.Protocol.Types.Common..=? arg3]
 
 instance Aeson.FromJSON SignatureInformation where
-  parseJSON = Aeson.withObject "SignatureInformation" $ \arg -> SignatureInformation <$> arg Aeson..: "label" <*> arg Aeson..:! "documentation" <*> arg Aeson..:! "parameters" <*> arg Aeson..:! "activeParameter"
+  parseJSON = Aeson.withObject "SignatureInformation" $ \arg -> SignatureInformation <$> arg Aeson..: "label" <*> arg Language.LSP.Protocol.Types.Common..:!? "documentation" <*> arg Language.LSP.Protocol.Types.Common..:!? "parameters" <*> arg Language.LSP.Protocol.Types.Common..:!? "activeParameter"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/StaticRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/StaticRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/StaticRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/StaticRegistrationOptions.hs
@@ -37,4 +37,4 @@
   toJSON (StaticRegistrationOptions arg0) = Aeson.object $ concat $  ["id" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON StaticRegistrationOptions where
-  parseJSON = Aeson.withObject "StaticRegistrationOptions" $ \arg -> StaticRegistrationOptions <$> arg Aeson..:! "id"
+  parseJSON = Aeson.withObject "StaticRegistrationOptions" $ \arg -> StaticRegistrationOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "id"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SymbolInformation.hs b/generated/Language/LSP/Protocol/Internal/Types/SymbolInformation.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SymbolInformation.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SymbolInformation.hs
@@ -79,4 +79,4 @@
     ,["location" Aeson..= arg5]]
 
 instance Aeson.FromJSON SymbolInformation where
-  parseJSON = Aeson.withObject "SymbolInformation" $ \arg -> SymbolInformation <$> arg Aeson..: "name" <*> arg Aeson..: "kind" <*> arg Aeson..:! "tags" <*> arg Aeson..:! "containerName" <*> arg Aeson..:! "deprecated" <*> arg Aeson..: "location"
+  parseJSON = Aeson.withObject "SymbolInformation" $ \arg -> SymbolInformation <$> arg Aeson..: "name" <*> arg Aeson..: "kind" <*> arg Language.LSP.Protocol.Types.Common..:!? "tags" <*> arg Language.LSP.Protocol.Types.Common..:!? "containerName" <*> arg Language.LSP.Protocol.Types.Common..:!? "deprecated" <*> arg Aeson..: "location"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SymbolKind.hs b/generated/Language/LSP/Protocol/Internal/Types/SymbolKind.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SymbolKind.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SymbolKind.hs
@@ -131,7 +131,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum SymbolKind Language.LSP.Protocol.Types.Common.UInt)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum SymbolKind)
   deriving Pretty via (ViaJSON SymbolKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum SymbolKind where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SymbolTag.hs b/generated/Language/LSP/Protocol/Internal/Types/SymbolTag.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SymbolTag.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SymbolTag.hs
@@ -33,7 +33,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum SymbolTag Language.LSP.Protocol.Types.Common.UInt)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum SymbolTag)
   deriving Pretty via (ViaJSON SymbolTag)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum SymbolTag where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/TextDocumentClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/TextDocumentClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/TextDocumentClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/TextDocumentClientCapabilities.hs
@@ -238,4 +238,4 @@
     ,"diagnostic" Language.LSP.Protocol.Types.Common..=? arg29]
 
 instance Aeson.FromJSON TextDocumentClientCapabilities where
-  parseJSON = Aeson.withObject "TextDocumentClientCapabilities" $ \arg -> TextDocumentClientCapabilities <$> arg Aeson..:! "synchronization" <*> arg Aeson..:! "completion" <*> arg Aeson..:! "hover" <*> arg Aeson..:! "signatureHelp" <*> arg Aeson..:! "declaration" <*> arg Aeson..:! "definition" <*> arg Aeson..:! "typeDefinition" <*> arg Aeson..:! "implementation" <*> arg Aeson..:! "references" <*> arg Aeson..:! "documentHighlight" <*> arg Aeson..:! "documentSymbol" <*> arg Aeson..:! "codeAction" <*> arg Aeson..:! "codeLens" <*> arg Aeson..:! "documentLink" <*> arg Aeson..:! "colorProvider" <*> arg Aeson..:! "formatting" <*> arg Aeson..:! "rangeFormatting" <*> arg Aeson..:! "onTypeFormatting" <*> arg Aeson..:! "rename" <*> arg Aeson..:! "foldingRange" <*> arg Aeson..:! "selectionRange" <*> arg Aeson..:! "publishDiagnostics" <*> arg Aeson..:! "callHierarchy" <*> arg Aeson..:! "semanticTokens" <*> arg Aeson..:! "linkedEditingRange" <*> arg Aeson..:! "moniker" <*> arg Aeson..:! "typeHierarchy" <*> arg Aeson..:! "inlineValue" <*> arg Aeson..:! "inlayHint" <*> arg Aeson..:! "diagnostic"
+  parseJSON = Aeson.withObject "TextDocumentClientCapabilities" $ \arg -> TextDocumentClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "synchronization" <*> arg Language.LSP.Protocol.Types.Common..:!? "completion" <*> arg Language.LSP.Protocol.Types.Common..:!? "hover" <*> arg Language.LSP.Protocol.Types.Common..:!? "signatureHelp" <*> arg Language.LSP.Protocol.Types.Common..:!? "declaration" <*> arg Language.LSP.Protocol.Types.Common..:!? "definition" <*> arg Language.LSP.Protocol.Types.Common..:!? "typeDefinition" <*> arg Language.LSP.Protocol.Types.Common..:!? "implementation" <*> arg Language.LSP.Protocol.Types.Common..:!? "references" <*> arg Language.LSP.Protocol.Types.Common..:!? "documentHighlight" <*> arg Language.LSP.Protocol.Types.Common..:!? "documentSymbol" <*> arg Language.LSP.Protocol.Types.Common..:!? "codeAction" <*> arg Language.LSP.Protocol.Types.Common..:!? "codeLens" <*> arg Language.LSP.Protocol.Types.Common..:!? "documentLink" <*> arg Language.LSP.Protocol.Types.Common..:!? "colorProvider" <*> arg Language.LSP.Protocol.Types.Common..:!? "formatting" <*> arg Language.LSP.Protocol.Types.Common..:!? "rangeFormatting" <*> arg Language.LSP.Protocol.Types.Common..:!? "onTypeFormatting" <*> arg Language.LSP.Protocol.Types.Common..:!? "rename" <*> arg Language.LSP.Protocol.Types.Common..:!? "foldingRange" <*> arg Language.LSP.Protocol.Types.Common..:!? "selectionRange" <*> arg Language.LSP.Protocol.Types.Common..:!? "publishDiagnostics" <*> arg Language.LSP.Protocol.Types.Common..:!? "callHierarchy" <*> arg Language.LSP.Protocol.Types.Common..:!? "semanticTokens" <*> arg Language.LSP.Protocol.Types.Common..:!? "linkedEditingRange" <*> arg Language.LSP.Protocol.Types.Common..:!? "moniker" <*> arg Language.LSP.Protocol.Types.Common..:!? "typeHierarchy" <*> arg Language.LSP.Protocol.Types.Common..:!? "inlineValue" <*> arg Language.LSP.Protocol.Types.Common..:!? "inlayHint" <*> arg Language.LSP.Protocol.Types.Common..:!? "diagnostic"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/TextDocumentSaveReason.hs b/generated/Language/LSP/Protocol/Internal/Types/TextDocumentSaveReason.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/TextDocumentSaveReason.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/TextDocumentSaveReason.hs
@@ -40,7 +40,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum TextDocumentSaveReason Language.LSP.Protocol.Types.Common.UInt)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum TextDocumentSaveReason)
   deriving Pretty via (ViaJSON TextDocumentSaveReason)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum TextDocumentSaveReason where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/TextDocumentSaveRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/TextDocumentSaveRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/TextDocumentSaveRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/TextDocumentSaveRegistrationOptions.hs
@@ -41,4 +41,4 @@
     ,"includeText" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON TextDocumentSaveRegistrationOptions where
-  parseJSON = Aeson.withObject "TextDocumentSaveRegistrationOptions" $ \arg -> TextDocumentSaveRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Aeson..:! "includeText"
+  parseJSON = Aeson.withObject "TextDocumentSaveRegistrationOptions" $ \arg -> TextDocumentSaveRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Language.LSP.Protocol.Types.Common..:!? "includeText"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/TextDocumentSyncClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/TextDocumentSyncClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/TextDocumentSyncClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/TextDocumentSyncClientCapabilities.hs
@@ -51,4 +51,4 @@
     ,"didSave" Language.LSP.Protocol.Types.Common..=? arg3]
 
 instance Aeson.FromJSON TextDocumentSyncClientCapabilities where
-  parseJSON = Aeson.withObject "TextDocumentSyncClientCapabilities" $ \arg -> TextDocumentSyncClientCapabilities <$> arg Aeson..:! "dynamicRegistration" <*> arg Aeson..:! "willSave" <*> arg Aeson..:! "willSaveWaitUntil" <*> arg Aeson..:! "didSave"
+  parseJSON = Aeson.withObject "TextDocumentSyncClientCapabilities" $ \arg -> TextDocumentSyncClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration" <*> arg Language.LSP.Protocol.Types.Common..:!? "willSave" <*> arg Language.LSP.Protocol.Types.Common..:!? "willSaveWaitUntil" <*> arg Language.LSP.Protocol.Types.Common..:!? "didSave"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/TextDocumentSyncKind.hs b/generated/Language/LSP/Protocol/Internal/Types/TextDocumentSyncKind.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/TextDocumentSyncKind.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/TextDocumentSyncKind.hs
@@ -43,7 +43,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum TextDocumentSyncKind Language.LSP.Protocol.Types.Common.UInt)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum TextDocumentSyncKind)
   deriving Pretty via (ViaJSON TextDocumentSyncKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum TextDocumentSyncKind where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/TextDocumentSyncOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/TextDocumentSyncOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/TextDocumentSyncOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/TextDocumentSyncOptions.hs
@@ -61,4 +61,4 @@
     ,"save" Language.LSP.Protocol.Types.Common..=? arg4]
 
 instance Aeson.FromJSON TextDocumentSyncOptions where
-  parseJSON = Aeson.withObject "TextDocumentSyncOptions" $ \arg -> TextDocumentSyncOptions <$> arg Aeson..:! "openClose" <*> arg Aeson..:! "change" <*> arg Aeson..:! "willSave" <*> arg Aeson..:! "willSaveWaitUntil" <*> arg Aeson..:! "save"
+  parseJSON = Aeson.withObject "TextDocumentSyncOptions" $ \arg -> TextDocumentSyncOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "openClose" <*> arg Language.LSP.Protocol.Types.Common..:!? "change" <*> arg Language.LSP.Protocol.Types.Common..:!? "willSave" <*> arg Language.LSP.Protocol.Types.Common..:!? "willSaveWaitUntil" <*> arg Language.LSP.Protocol.Types.Common..:!? "save"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/TokenFormat.hs b/generated/Language/LSP/Protocol/Internal/Types/TokenFormat.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/TokenFormat.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/TokenFormat.hs
@@ -31,7 +31,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum TokenFormat Data.Text.Text)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum TokenFormat)
   deriving Pretty via (ViaJSON TokenFormat)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum TokenFormat where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/TraceValues.hs b/generated/Language/LSP/Protocol/Internal/Types/TraceValues.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/TraceValues.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/TraceValues.hs
@@ -39,7 +39,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum TraceValues Data.Text.Text)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum TraceValues)
   deriving Pretty via (ViaJSON TraceValues)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum TraceValues where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/TypeDefinitionClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/TypeDefinitionClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/TypeDefinitionClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/TypeDefinitionClientCapabilities.hs
@@ -43,4 +43,4 @@
     ,"linkSupport" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON TypeDefinitionClientCapabilities where
-  parseJSON = Aeson.withObject "TypeDefinitionClientCapabilities" $ \arg -> TypeDefinitionClientCapabilities <$> arg Aeson..:! "dynamicRegistration" <*> arg Aeson..:! "linkSupport"
+  parseJSON = Aeson.withObject "TypeDefinitionClientCapabilities" $ \arg -> TypeDefinitionClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration" <*> arg Language.LSP.Protocol.Types.Common..:!? "linkSupport"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/TypeDefinitionOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/TypeDefinitionOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/TypeDefinitionOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/TypeDefinitionOptions.hs
@@ -34,4 +34,4 @@
   toJSON (TypeDefinitionOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON TypeDefinitionOptions where
-  parseJSON = Aeson.withObject "TypeDefinitionOptions" $ \arg -> TypeDefinitionOptions <$> arg Aeson..:! "workDoneProgress"
+  parseJSON = Aeson.withObject "TypeDefinitionOptions" $ \arg -> TypeDefinitionOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/TypeDefinitionParams.hs b/generated/Language/LSP/Protocol/Internal/Types/TypeDefinitionParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/TypeDefinitionParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/TypeDefinitionParams.hs
@@ -53,4 +53,4 @@
     ,"partialResultToken" Language.LSP.Protocol.Types.Common..=? arg3]
 
 instance Aeson.FromJSON TypeDefinitionParams where
-  parseJSON = Aeson.withObject "TypeDefinitionParams" $ \arg -> TypeDefinitionParams <$> arg Aeson..: "textDocument" <*> arg Aeson..: "position" <*> arg Aeson..:! "workDoneToken" <*> arg Aeson..:! "partialResultToken"
+  parseJSON = Aeson.withObject "TypeDefinitionParams" $ \arg -> TypeDefinitionParams <$> arg Aeson..: "textDocument" <*> arg Aeson..: "position" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Language.LSP.Protocol.Types.Common..:!? "partialResultToken"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/TypeDefinitionRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/TypeDefinitionRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/TypeDefinitionRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/TypeDefinitionRegistrationOptions.hs
@@ -48,4 +48,4 @@
     ,"id" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON TypeDefinitionRegistrationOptions where
-  parseJSON = Aeson.withObject "TypeDefinitionRegistrationOptions" $ \arg -> TypeDefinitionRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Aeson..:! "workDoneProgress" <*> arg Aeson..:! "id"
+  parseJSON = Aeson.withObject "TypeDefinitionRegistrationOptions" $ \arg -> TypeDefinitionRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Language.LSP.Protocol.Types.Common..:!? "id"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/TypeHierarchyClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/TypeHierarchyClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/TypeHierarchyClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/TypeHierarchyClientCapabilities.hs
@@ -36,4 +36,4 @@
   toJSON (TypeHierarchyClientCapabilities arg0) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON TypeHierarchyClientCapabilities where
-  parseJSON = Aeson.withObject "TypeHierarchyClientCapabilities" $ \arg -> TypeHierarchyClientCapabilities <$> arg Aeson..:! "dynamicRegistration"
+  parseJSON = Aeson.withObject "TypeHierarchyClientCapabilities" $ \arg -> TypeHierarchyClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/TypeHierarchyItem.hs b/generated/Language/LSP/Protocol/Internal/Types/TypeHierarchyItem.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/TypeHierarchyItem.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/TypeHierarchyItem.hs
@@ -81,4 +81,4 @@
     ,"data" Language.LSP.Protocol.Types.Common..=? arg7]
 
 instance Aeson.FromJSON TypeHierarchyItem where
-  parseJSON = Aeson.withObject "TypeHierarchyItem" $ \arg -> TypeHierarchyItem <$> arg Aeson..: "name" <*> arg Aeson..: "kind" <*> arg Aeson..:! "tags" <*> arg Aeson..:! "detail" <*> arg Aeson..: "uri" <*> arg Aeson..: "range" <*> arg Aeson..: "selectionRange" <*> arg Aeson..:! "data"
+  parseJSON = Aeson.withObject "TypeHierarchyItem" $ \arg -> TypeHierarchyItem <$> arg Aeson..: "name" <*> arg Aeson..: "kind" <*> arg Language.LSP.Protocol.Types.Common..:!? "tags" <*> arg Language.LSP.Protocol.Types.Common..:!? "detail" <*> arg Aeson..: "uri" <*> arg Aeson..: "range" <*> arg Aeson..: "selectionRange" <*> arg Language.LSP.Protocol.Types.Common..:!? "data"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/TypeHierarchyOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/TypeHierarchyOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/TypeHierarchyOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/TypeHierarchyOptions.hs
@@ -36,4 +36,4 @@
   toJSON (TypeHierarchyOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON TypeHierarchyOptions where
-  parseJSON = Aeson.withObject "TypeHierarchyOptions" $ \arg -> TypeHierarchyOptions <$> arg Aeson..:! "workDoneProgress"
+  parseJSON = Aeson.withObject "TypeHierarchyOptions" $ \arg -> TypeHierarchyOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/TypeHierarchyPrepareParams.hs b/generated/Language/LSP/Protocol/Internal/Types/TypeHierarchyPrepareParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/TypeHierarchyPrepareParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/TypeHierarchyPrepareParams.hs
@@ -49,4 +49,4 @@
     ,"workDoneToken" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON TypeHierarchyPrepareParams where
-  parseJSON = Aeson.withObject "TypeHierarchyPrepareParams" $ \arg -> TypeHierarchyPrepareParams <$> arg Aeson..: "textDocument" <*> arg Aeson..: "position" <*> arg Aeson..:! "workDoneToken"
+  parseJSON = Aeson.withObject "TypeHierarchyPrepareParams" $ \arg -> TypeHierarchyPrepareParams <$> arg Aeson..: "textDocument" <*> arg Aeson..: "position" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/TypeHierarchyRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/TypeHierarchyRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/TypeHierarchyRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/TypeHierarchyRegistrationOptions.hs
@@ -50,4 +50,4 @@
     ,"id" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON TypeHierarchyRegistrationOptions where
-  parseJSON = Aeson.withObject "TypeHierarchyRegistrationOptions" $ \arg -> TypeHierarchyRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Aeson..:! "workDoneProgress" <*> arg Aeson..:! "id"
+  parseJSON = Aeson.withObject "TypeHierarchyRegistrationOptions" $ \arg -> TypeHierarchyRegistrationOptions <$> arg Aeson..: "documentSelector" <*> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Language.LSP.Protocol.Types.Common..:!? "id"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/TypeHierarchySubtypesParams.hs b/generated/Language/LSP/Protocol/Internal/Types/TypeHierarchySubtypesParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/TypeHierarchySubtypesParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/TypeHierarchySubtypesParams.hs
@@ -49,4 +49,4 @@
     ,["item" Aeson..= arg2]]
 
 instance Aeson.FromJSON TypeHierarchySubtypesParams where
-  parseJSON = Aeson.withObject "TypeHierarchySubtypesParams" $ \arg -> TypeHierarchySubtypesParams <$> arg Aeson..:! "workDoneToken" <*> arg Aeson..:! "partialResultToken" <*> arg Aeson..: "item"
+  parseJSON = Aeson.withObject "TypeHierarchySubtypesParams" $ \arg -> TypeHierarchySubtypesParams <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Language.LSP.Protocol.Types.Common..:!? "partialResultToken" <*> arg Aeson..: "item"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/TypeHierarchySupertypesParams.hs b/generated/Language/LSP/Protocol/Internal/Types/TypeHierarchySupertypesParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/TypeHierarchySupertypesParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/TypeHierarchySupertypesParams.hs
@@ -49,4 +49,4 @@
     ,["item" Aeson..= arg2]]
 
 instance Aeson.FromJSON TypeHierarchySupertypesParams where
-  parseJSON = Aeson.withObject "TypeHierarchySupertypesParams" $ \arg -> TypeHierarchySupertypesParams <$> arg Aeson..:! "workDoneToken" <*> arg Aeson..:! "partialResultToken" <*> arg Aeson..: "item"
+  parseJSON = Aeson.withObject "TypeHierarchySupertypesParams" $ \arg -> TypeHierarchySupertypesParams <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Language.LSP.Protocol.Types.Common..:!? "partialResultToken" <*> arg Aeson..: "item"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/UInitializeParams.hs b/generated/Language/LSP/Protocol/Internal/Types/UInitializeParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/UInitializeParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/UInitializeParams.hs
@@ -101,4 +101,4 @@
     ,"trace" Language.LSP.Protocol.Types.Common..=? arg8]
 
 instance Aeson.FromJSON UInitializeParams where
-  parseJSON = Aeson.withObject "_InitializeParams" $ \arg -> UInitializeParams <$> arg Aeson..:! "workDoneToken" <*> arg Aeson..: "processId" <*> arg Aeson..:! "clientInfo" <*> arg Aeson..:! "locale" <*> arg Aeson..:! "rootPath" <*> arg Aeson..: "rootUri" <*> arg Aeson..: "capabilities" <*> arg Aeson..:! "initializationOptions" <*> arg Aeson..:! "trace"
+  parseJSON = Aeson.withObject "_InitializeParams" $ \arg -> UInitializeParams <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Aeson..: "processId" <*> arg Language.LSP.Protocol.Types.Common..:!? "clientInfo" <*> arg Language.LSP.Protocol.Types.Common..:!? "locale" <*> arg Language.LSP.Protocol.Types.Common..:!? "rootPath" <*> arg Aeson..: "rootUri" <*> arg Aeson..: "capabilities" <*> arg Language.LSP.Protocol.Types.Common..:!? "initializationOptions" <*> arg Language.LSP.Protocol.Types.Common..:!? "trace"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/UniquenessLevel.hs b/generated/Language/LSP/Protocol/Internal/Types/UniquenessLevel.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/UniquenessLevel.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/UniquenessLevel.hs
@@ -49,7 +49,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum UniquenessLevel Data.Text.Text)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum UniquenessLevel)
   deriving Pretty via (ViaJSON UniquenessLevel)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum UniquenessLevel where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/WatchKind.hs b/generated/Language/LSP/Protocol/Internal/Types/WatchKind.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/WatchKind.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/WatchKind.hs
@@ -40,7 +40,7 @@
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
-  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum WatchKind Language.LSP.Protocol.Types.Common.UInt)
+  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum WatchKind)
   deriving Pretty via (ViaJSON WatchKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum WatchKind where
diff --git a/generated/Language/LSP/Protocol/Internal/Types/WindowClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/WindowClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/WindowClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/WindowClientCapabilities.hs
@@ -58,4 +58,4 @@
     ,"showDocument" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON WindowClientCapabilities where
-  parseJSON = Aeson.withObject "WindowClientCapabilities" $ \arg -> WindowClientCapabilities <$> arg Aeson..:! "workDoneProgress" <*> arg Aeson..:! "showMessage" <*> arg Aeson..:! "showDocument"
+  parseJSON = Aeson.withObject "WindowClientCapabilities" $ \arg -> WindowClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Language.LSP.Protocol.Types.Common..:!? "showMessage" <*> arg Language.LSP.Protocol.Types.Common..:!? "showDocument"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/WorkDoneProgressBegin.hs b/generated/Language/LSP/Protocol/Internal/Types/WorkDoneProgressBegin.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/WorkDoneProgressBegin.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/WorkDoneProgressBegin.hs
@@ -70,4 +70,4 @@
     ,"percentage" Language.LSP.Protocol.Types.Common..=? arg4]
 
 instance Aeson.FromJSON WorkDoneProgressBegin where
-  parseJSON = Aeson.withObject "WorkDoneProgressBegin" $ \arg -> WorkDoneProgressBegin <$> arg Aeson..: "kind" <*> arg Aeson..: "title" <*> arg Aeson..:! "cancellable" <*> arg Aeson..:! "message" <*> arg Aeson..:! "percentage"
+  parseJSON = Aeson.withObject "WorkDoneProgressBegin" $ \arg -> WorkDoneProgressBegin <$> arg Aeson..: "kind" <*> arg Aeson..: "title" <*> arg Language.LSP.Protocol.Types.Common..:!? "cancellable" <*> arg Language.LSP.Protocol.Types.Common..:!? "message" <*> arg Language.LSP.Protocol.Types.Common..:!? "percentage"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/WorkDoneProgressEnd.hs b/generated/Language/LSP/Protocol/Internal/Types/WorkDoneProgressEnd.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/WorkDoneProgressEnd.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/WorkDoneProgressEnd.hs
@@ -42,4 +42,4 @@
     ,"message" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON WorkDoneProgressEnd where
-  parseJSON = Aeson.withObject "WorkDoneProgressEnd" $ \arg -> WorkDoneProgressEnd <$> arg Aeson..: "kind" <*> arg Aeson..:! "message"
+  parseJSON = Aeson.withObject "WorkDoneProgressEnd" $ \arg -> WorkDoneProgressEnd <$> arg Aeson..: "kind" <*> arg Language.LSP.Protocol.Types.Common..:!? "message"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/WorkDoneProgressOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/WorkDoneProgressOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/WorkDoneProgressOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/WorkDoneProgressOptions.hs
@@ -34,4 +34,4 @@
   toJSON (WorkDoneProgressOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON WorkDoneProgressOptions where
-  parseJSON = Aeson.withObject "WorkDoneProgressOptions" $ \arg -> WorkDoneProgressOptions <$> arg Aeson..:! "workDoneProgress"
+  parseJSON = Aeson.withObject "WorkDoneProgressOptions" $ \arg -> WorkDoneProgressOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/WorkDoneProgressParams.hs b/generated/Language/LSP/Protocol/Internal/Types/WorkDoneProgressParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/WorkDoneProgressParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/WorkDoneProgressParams.hs
@@ -35,4 +35,4 @@
   toJSON (WorkDoneProgressParams arg0) = Aeson.object $ concat $  ["workDoneToken" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON WorkDoneProgressParams where
-  parseJSON = Aeson.withObject "WorkDoneProgressParams" $ \arg -> WorkDoneProgressParams <$> arg Aeson..:! "workDoneToken"
+  parseJSON = Aeson.withObject "WorkDoneProgressParams" $ \arg -> WorkDoneProgressParams <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/WorkDoneProgressReport.hs b/generated/Language/LSP/Protocol/Internal/Types/WorkDoneProgressReport.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/WorkDoneProgressReport.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/WorkDoneProgressReport.hs
@@ -63,4 +63,4 @@
     ,"percentage" Language.LSP.Protocol.Types.Common..=? arg3]
 
 instance Aeson.FromJSON WorkDoneProgressReport where
-  parseJSON = Aeson.withObject "WorkDoneProgressReport" $ \arg -> WorkDoneProgressReport <$> arg Aeson..: "kind" <*> arg Aeson..:! "cancellable" <*> arg Aeson..:! "message" <*> arg Aeson..:! "percentage"
+  parseJSON = Aeson.withObject "WorkDoneProgressReport" $ \arg -> WorkDoneProgressReport <$> arg Aeson..: "kind" <*> arg Language.LSP.Protocol.Types.Common..:!? "cancellable" <*> arg Language.LSP.Protocol.Types.Common..:!? "message" <*> arg Language.LSP.Protocol.Types.Common..:!? "percentage"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceClientCapabilities.hs
@@ -133,4 +133,4 @@
     ,"diagnostics" Language.LSP.Protocol.Types.Common..=? arg13]
 
 instance Aeson.FromJSON WorkspaceClientCapabilities where
-  parseJSON = Aeson.withObject "WorkspaceClientCapabilities" $ \arg -> WorkspaceClientCapabilities <$> arg Aeson..:! "applyEdit" <*> arg Aeson..:! "workspaceEdit" <*> arg Aeson..:! "didChangeConfiguration" <*> arg Aeson..:! "didChangeWatchedFiles" <*> arg Aeson..:! "symbol" <*> arg Aeson..:! "executeCommand" <*> arg Aeson..:! "workspaceFolders" <*> arg Aeson..:! "configuration" <*> arg Aeson..:! "semanticTokens" <*> arg Aeson..:! "codeLens" <*> arg Aeson..:! "fileOperations" <*> arg Aeson..:! "inlineValue" <*> arg Aeson..:! "inlayHint" <*> arg Aeson..:! "diagnostics"
+  parseJSON = Aeson.withObject "WorkspaceClientCapabilities" $ \arg -> WorkspaceClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "applyEdit" <*> arg Language.LSP.Protocol.Types.Common..:!? "workspaceEdit" <*> arg Language.LSP.Protocol.Types.Common..:!? "didChangeConfiguration" <*> arg Language.LSP.Protocol.Types.Common..:!? "didChangeWatchedFiles" <*> arg Language.LSP.Protocol.Types.Common..:!? "symbol" <*> arg Language.LSP.Protocol.Types.Common..:!? "executeCommand" <*> arg Language.LSP.Protocol.Types.Common..:!? "workspaceFolders" <*> arg Language.LSP.Protocol.Types.Common..:!? "configuration" <*> arg Language.LSP.Protocol.Types.Common..:!? "semanticTokens" <*> arg Language.LSP.Protocol.Types.Common..:!? "codeLens" <*> arg Language.LSP.Protocol.Types.Common..:!? "fileOperations" <*> arg Language.LSP.Protocol.Types.Common..:!? "inlineValue" <*> arg Language.LSP.Protocol.Types.Common..:!? "inlayHint" <*> arg Language.LSP.Protocol.Types.Common..:!? "diagnostics"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceDiagnosticParams.hs b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceDiagnosticParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceDiagnosticParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceDiagnosticParams.hs
@@ -56,4 +56,4 @@
     ,["previousResultIds" Aeson..= arg3]]
 
 instance Aeson.FromJSON WorkspaceDiagnosticParams where
-  parseJSON = Aeson.withObject "WorkspaceDiagnosticParams" $ \arg -> WorkspaceDiagnosticParams <$> arg Aeson..:! "workDoneToken" <*> arg Aeson..:! "partialResultToken" <*> arg Aeson..:! "identifier" <*> arg Aeson..: "previousResultIds"
+  parseJSON = Aeson.withObject "WorkspaceDiagnosticParams" $ \arg -> WorkspaceDiagnosticParams <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Language.LSP.Protocol.Types.Common..:!? "partialResultToken" <*> arg Language.LSP.Protocol.Types.Common..:!? "identifier" <*> arg Aeson..: "previousResultIds"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceEdit.hs b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceEdit.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceEdit.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceEdit.hs
@@ -78,4 +78,4 @@
     ,"changeAnnotations" Language.LSP.Protocol.Types.Common..=? arg2]
 
 instance Aeson.FromJSON WorkspaceEdit where
-  parseJSON = Aeson.withObject "WorkspaceEdit" $ \arg -> WorkspaceEdit <$> arg Aeson..:! "changes" <*> arg Aeson..:! "documentChanges" <*> arg Aeson..:! "changeAnnotations"
+  parseJSON = Aeson.withObject "WorkspaceEdit" $ \arg -> WorkspaceEdit <$> arg Language.LSP.Protocol.Types.Common..:!? "changes" <*> arg Language.LSP.Protocol.Types.Common..:!? "documentChanges" <*> arg Language.LSP.Protocol.Types.Common..:!? "changeAnnotations"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceEditClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceEditClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceEditClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceEditClientCapabilities.hs
@@ -72,4 +72,4 @@
     ,"changeAnnotationSupport" Language.LSP.Protocol.Types.Common..=? arg4]
 
 instance Aeson.FromJSON WorkspaceEditClientCapabilities where
-  parseJSON = Aeson.withObject "WorkspaceEditClientCapabilities" $ \arg -> WorkspaceEditClientCapabilities <$> arg Aeson..:! "documentChanges" <*> arg Aeson..:! "resourceOperations" <*> arg Aeson..:! "failureHandling" <*> arg Aeson..:! "normalizesLineEndings" <*> arg Aeson..:! "changeAnnotationSupport"
+  parseJSON = Aeson.withObject "WorkspaceEditClientCapabilities" $ \arg -> WorkspaceEditClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "documentChanges" <*> arg Language.LSP.Protocol.Types.Common..:!? "resourceOperations" <*> arg Language.LSP.Protocol.Types.Common..:!? "failureHandling" <*> arg Language.LSP.Protocol.Types.Common..:!? "normalizesLineEndings" <*> arg Language.LSP.Protocol.Types.Common..:!? "changeAnnotationSupport"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceFoldersInitializeParams.hs b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceFoldersInitializeParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceFoldersInitializeParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceFoldersInitializeParams.hs
@@ -41,4 +41,4 @@
   toJSON (WorkspaceFoldersInitializeParams arg0) = Aeson.object $ concat $  ["workspaceFolders" Language.LSP.Protocol.Types.Common..=? arg0]
 
 instance Aeson.FromJSON WorkspaceFoldersInitializeParams where
-  parseJSON = Aeson.withObject "WorkspaceFoldersInitializeParams" $ \arg -> WorkspaceFoldersInitializeParams <$> arg Aeson..:! "workspaceFolders"
+  parseJSON = Aeson.withObject "WorkspaceFoldersInitializeParams" $ \arg -> WorkspaceFoldersInitializeParams <$> arg Language.LSP.Protocol.Types.Common..:!? "workspaceFolders"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceFoldersServerCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceFoldersServerCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceFoldersServerCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceFoldersServerCapabilities.hs
@@ -46,4 +46,4 @@
     ,"changeNotifications" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON WorkspaceFoldersServerCapabilities where
-  parseJSON = Aeson.withObject "WorkspaceFoldersServerCapabilities" $ \arg -> WorkspaceFoldersServerCapabilities <$> arg Aeson..:! "supported" <*> arg Aeson..:! "changeNotifications"
+  parseJSON = Aeson.withObject "WorkspaceFoldersServerCapabilities" $ \arg -> WorkspaceFoldersServerCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "supported" <*> arg Language.LSP.Protocol.Types.Common..:!? "changeNotifications"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceFullDocumentDiagnosticReport.hs b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceFullDocumentDiagnosticReport.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceFullDocumentDiagnosticReport.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceFullDocumentDiagnosticReport.hs
@@ -63,4 +63,4 @@
     ,["version" Aeson..= arg4]]
 
 instance Aeson.FromJSON WorkspaceFullDocumentDiagnosticReport where
-  parseJSON = Aeson.withObject "WorkspaceFullDocumentDiagnosticReport" $ \arg -> WorkspaceFullDocumentDiagnosticReport <$> arg Aeson..: "kind" <*> arg Aeson..:! "resultId" <*> arg Aeson..: "items" <*> arg Aeson..: "uri" <*> arg Aeson..: "version"
+  parseJSON = Aeson.withObject "WorkspaceFullDocumentDiagnosticReport" $ \arg -> WorkspaceFullDocumentDiagnosticReport <$> arg Aeson..: "kind" <*> arg Language.LSP.Protocol.Types.Common..:!? "resultId" <*> arg Aeson..: "items" <*> arg Aeson..: "uri" <*> arg Aeson..: "version"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceSymbol.hs b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceSymbol.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceSymbol.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceSymbol.hs
@@ -80,4 +80,4 @@
     ,"data" Language.LSP.Protocol.Types.Common..=? arg5]
 
 instance Aeson.FromJSON WorkspaceSymbol where
-  parseJSON = Aeson.withObject "WorkspaceSymbol" $ \arg -> WorkspaceSymbol <$> arg Aeson..: "name" <*> arg Aeson..: "kind" <*> arg Aeson..:! "tags" <*> arg Aeson..:! "containerName" <*> arg Aeson..: "location" <*> arg Aeson..:! "data"
+  parseJSON = Aeson.withObject "WorkspaceSymbol" $ \arg -> WorkspaceSymbol <$> arg Aeson..: "name" <*> arg Aeson..: "kind" <*> arg Language.LSP.Protocol.Types.Common..:!? "tags" <*> arg Language.LSP.Protocol.Types.Common..:!? "containerName" <*> arg Aeson..: "location" <*> arg Language.LSP.Protocol.Types.Common..:!? "data"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceSymbolClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceSymbolClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceSymbolClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceSymbolClientCapabilities.hs
@@ -60,4 +60,4 @@
     ,"resolveSupport" Language.LSP.Protocol.Types.Common..=? arg3]
 
 instance Aeson.FromJSON WorkspaceSymbolClientCapabilities where
-  parseJSON = Aeson.withObject "WorkspaceSymbolClientCapabilities" $ \arg -> WorkspaceSymbolClientCapabilities <$> arg Aeson..:! "dynamicRegistration" <*> arg Aeson..:! "symbolKind" <*> arg Aeson..:! "tagSupport" <*> arg Aeson..:! "resolveSupport"
+  parseJSON = Aeson.withObject "WorkspaceSymbolClientCapabilities" $ \arg -> WorkspaceSymbolClientCapabilities <$> arg Language.LSP.Protocol.Types.Common..:!? "dynamicRegistration" <*> arg Language.LSP.Protocol.Types.Common..:!? "symbolKind" <*> arg Language.LSP.Protocol.Types.Common..:!? "tagSupport" <*> arg Language.LSP.Protocol.Types.Common..:!? "resolveSupport"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceSymbolOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceSymbolOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceSymbolOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceSymbolOptions.hs
@@ -42,4 +42,4 @@
     ,"resolveProvider" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON WorkspaceSymbolOptions where
-  parseJSON = Aeson.withObject "WorkspaceSymbolOptions" $ \arg -> WorkspaceSymbolOptions <$> arg Aeson..:! "workDoneProgress" <*> arg Aeson..:! "resolveProvider"
+  parseJSON = Aeson.withObject "WorkspaceSymbolOptions" $ \arg -> WorkspaceSymbolOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Language.LSP.Protocol.Types.Common..:!? "resolveProvider"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceSymbolParams.hs b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceSymbolParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceSymbolParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceSymbolParams.hs
@@ -48,4 +48,4 @@
     ,["query" Aeson..= arg2]]
 
 instance Aeson.FromJSON WorkspaceSymbolParams where
-  parseJSON = Aeson.withObject "WorkspaceSymbolParams" $ \arg -> WorkspaceSymbolParams <$> arg Aeson..:! "workDoneToken" <*> arg Aeson..:! "partialResultToken" <*> arg Aeson..: "query"
+  parseJSON = Aeson.withObject "WorkspaceSymbolParams" $ \arg -> WorkspaceSymbolParams <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneToken" <*> arg Language.LSP.Protocol.Types.Common..:!? "partialResultToken" <*> arg Aeson..: "query"
diff --git a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceSymbolRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceSymbolRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceSymbolRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceSymbolRegistrationOptions.hs
@@ -42,4 +42,4 @@
     ,"resolveProvider" Language.LSP.Protocol.Types.Common..=? arg1]
 
 instance Aeson.FromJSON WorkspaceSymbolRegistrationOptions where
-  parseJSON = Aeson.withObject "WorkspaceSymbolRegistrationOptions" $ \arg -> WorkspaceSymbolRegistrationOptions <$> arg Aeson..:! "workDoneProgress" <*> arg Aeson..:! "resolveProvider"
+  parseJSON = Aeson.withObject "WorkspaceSymbolRegistrationOptions" $ \arg -> WorkspaceSymbolRegistrationOptions <$> arg Language.LSP.Protocol.Types.Common..:!? "workDoneProgress" <*> arg Language.LSP.Protocol.Types.Common..:!? "resolveProvider"
diff --git a/generator/CodeGen.hs b/generator/CodeGen.hs
--- a/generator/CodeGen.hs
+++ b/generator/CodeGen.hs
@@ -1,10 +1,8 @@
 {-# LANGUAGE DuplicateRecordFields #-}
 {-# LANGUAGE LambdaCase #-}
-{-# LANGUAGE NamedFieldPuns #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE QuasiQuotes #-}
 {-# LANGUAGE RecordWildCards #-}
-{-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE ViewPatterns #-}
 
 {- | The main module for generating code from the metamodel
@@ -163,9 +161,10 @@
 genFromMetaModel prefix dir mm = do
   let (symbolTable, structTable) = buildTables mm
   flip runReaderT (CodeGenEnv symbolTable structTable prefix dir) $ do
-    structModuleNames <- traverse genStruct (structures mm)
     -- Don't even generate LSPAny, LSPObject, or LSPArry
-    aliasModuleNames <- traverse genAlias (filter (\TypeAlias{name} -> name `notElem` ["LSPAny", "LSPObject", "LSPArray"]) (typeAliases mm))
+    let filteredAliases = filter (\TypeAlias{name} -> name `notElem` ["LSPAny", "LSPObject", "LSPArray"]) (typeAliases mm)
+    structModuleNames <- traverse genStruct (structures mm)
+    aliasModuleNames <- traverse genAlias filteredAliases
     enumModuleNames <- traverse genEnum (enumerations mm)
     methodModuleName <- genMethods (requests mm) (notifications mm)
     -- not the methods, we export them separately!
@@ -173,7 +172,9 @@
     -- Have to use the string form of the generated Name
     -- since we might have mangled the original name
     let structNames = mapMaybe (\Structure{name} -> Map.lookup name symbolTable) (structures mm)
-    genLensModule structNames
+        aliasNames = mapMaybe (\TypeAlias{name} -> Map.lookup name symbolTable) filteredAliases
+        enumNames = mapMaybe (\Enumeration{name} -> Map.lookup name symbolTable) (enumerations mm)
+    genMetaModule structNames aliasNames enumNames
     pure ()
   pure ()
 
@@ -334,12 +335,13 @@
   ensureImport "Data.Aeson" (QualAs "Aeson")
   ensureImport "Data.Row.Aeson" (QualAs "Aeson")
   ensureImport "Data.Row.Hashable" (QualAs "Hashable")
-  matcherName <- entityName "Language.LSP.Protocol.Types.Common" ".=?"
+  optionalPairerName <- entityName "Language.LSP.Protocol.Types.Common" ".=?"
+  optionalMatcherName <- entityName "Language.LSP.Protocol.Types.Common" ".:!?"
   let toJsonD =
         let (unzip -> (args, pairEs)) = flip fmap (zip props [0 ..]) $ \(Property{name, optional}, i) ->
               let n :: T.Text = "arg" <> (T.pack $ show i)
                   pairE = case optional of
-                    Just True -> dquotes (pretty name) <+> pretty matcherName <+> pretty n
+                    Just True -> dquotes (pretty name) <+> pretty optionalPairerName <+> pretty n
                     _ -> brackets (dquotes (pretty name) <+> "Aeson..=" <+> pretty n)
                in (pretty n, pairE)
             body = "Aeson.object $ concat $ " <+> encloseSep "[" "]" "," pairEs
@@ -351,7 +353,9 @@
     let vn :: T.Text = "arg"
     let exprs = flip fmap props $ \Property{name, optional} ->
           case optional of
-            Just True -> pretty vn <+> "Aeson..:!" <+> dquotes (pretty name)
+            -- Accept null in place of Nothing
+            -- Note [Principle of robustness for parsing LSP types]
+            Just True -> pretty vn <+> pretty optionalMatcherName <+> dquotes (pretty name)
             _ -> pretty vn <+> "Aeson..:" <+> dquotes (pretty name)
     let lamBody = mkIterApplicativeApp (pretty tn) exprs
     let body = "Aeson.withObject" <+> dquotes (pretty structName) <+> "$" <+> "\\" <> pretty vn <+> "->" <+> nest indentSize lamBody
@@ -474,7 +478,7 @@
           toDeriveViaLspEnum = ["Aeson.ToJSON", "Aeson.FromJSON"] ++ if custom && isString then [isStringN] else []
           stockDeriv = "deriving stock" <+> tupled (fmap pretty toStockDerive)
           anyclassDeriv = "deriving anyclass" <+> tupled (fmap pretty toAnyclassDerive)
-          viaDeriv1 = "deriving" <+> tupled toDeriveViaLspEnum <+> "via" <+> parens (asLspEnumN <+> pretty tn <+> ty)
+          viaDeriv1 = "deriving" <+> tupled toDeriveViaLspEnum <+> "via" <+> parens (asLspEnumN <+> pretty tn)
           viaDeriv2 = "deriving" <+> "Pretty" <+> "via" <+> parens ("ViaJSON" <+> pretty tn)
          in
           indent indentSize $ hardvcat [stockDeriv, anyclassDeriv, viaDeriv1, viaDeriv2]
@@ -844,17 +848,32 @@
 genMethods reqs nots = do
   genModule "Method" [] Nothing (printMethods reqs nots)
 
---------------
+---------------
 
-genLensModule :: [T.Text] -> CodeGenM T.Text
-genLensModule names = do
-  genModule "Lens" ["TemplateHaskell"] Nothing $ do
-    mkLensesN <- pretty <$> entityName "Control.Lens.TH" "makeFieldsNoPrefix"
-    decls <- for names $ \thn -> do
-      nm <- pretty <$> lspEntityName (typesModSegment <> "." <> thn) thn
-      let lensesD = mkLensesN <+> "''" <> nm
-      pure lensesD
-    pure $ hardvcat decls
+genMetaModule :: [T.Text] -> [T.Text] -> [T.Text] -> CodeGenM T.Text
+genMetaModule structNames aliasNames enumNames = do
+  genModule "Meta" ["TemplateHaskell"] Nothing $ do
+    ensureImport "Language.Haskell.TH" (QualAs "TH")
+    let tyn thn = pretty <$> entityName "Language.LSP.Protocol.Internal.Types" thn
+    sns <- traverse tyn structNames
+    ans <- traverse tyn aliasNames
+    ens <- traverse tyn enumNames
+    let
+      sig1 = "structNames" <+> "::" <+> brackets "TH.Name"
+      decl1 = "structNames =" <+> nest indentSize (encloseSep "[" "]" "," $ fmap (\n -> "''" <> n) sns)
+      sig2 = "aliasNames" <+> "::" <+> brackets "TH.Name"
+      decl2 = "aliasNames =" <+> nest indentSize (encloseSep "[" "]" "," $ fmap (\n -> "''" <> n) ans)
+      sig3 = "enumNames" <+> "::" <+> brackets "TH.Name"
+      decl3 = "enumNames =" <+> nest indentSize (encloseSep "[" "]" "," $ fmap (\n -> "''" <> n) ens)
+    pure $
+      hardvcat
+        [ sig1
+        , decl1
+        , sig2
+        , decl2
+        , sig3
+        , decl3
+        ]
 
 ---------------
 
@@ -1021,4 +1040,25 @@
 
 We don't do this for fields, instead we rely on `DuplicateRecordFields` and
 use classy lenses.
+-}
+
+{- Note [Principle of robustness for parsing LSP types]
+The principle of robustness states:
+
+> Be conservative in what you do, liberal in what you accept from others
+
+We try to follow this when parsing LSP types, and where possible accept
+"slightly wrong" input. This is important because the LSP spec is very
+fiddly to implement correctly, and there are many clients we interact with,
+some of whom will therefore get it wrong. It's best if we can accept this
+(although in an ideal world we would also emit a warning, but it's not super
+easy to do that, so we just don't).
+
+Specific ways in which we try to be robust:
+- Accept 'null' to mean "missing". The LSP spec *sometimes* allows a value
+  to be 'null', but often it says a value can be missing but is not nullable.
+  A common mistake for clients is to still send 'null' to mean "missing"
+  (see e.g. https://github.com/haskell/haskell-language-server/issues/3842#issuecomment-1798217080).
+  This is complicated because if 'null' is an allowed value then we want to parse
+  it as a present 'null', not missing.
 -}
diff --git a/lsp-types.cabal b/lsp-types.cabal
--- a/lsp-types.cabal
+++ b/lsp-types.cabal
@@ -1,6 +1,6 @@
 cabal-version:      3.0
 name:               lsp-types
-version:            2.1.0.0
+version:            2.1.1.0
 synopsis:
   Haskell library for the Microsoft Language Server Protocol, data types
 
@@ -18,8 +18,8 @@
 build-type:         Simple
 extra-source-files:
   ChangeLog.md
-  README.md
   metaModel.json
+  README.md
 
 source-repository head
   type:     git
@@ -33,7 +33,8 @@
 
 library
   hs-source-dirs:     src generated
-  default-language:   Haskell2010
+  default-language:   GHC2021
+
   -- Various things we want on by default
   -- * syntactic niceties, QOL
   -- * we always want more deriving options
@@ -45,60 +46,51 @@
   default-extensions:
     DataKinds
     DeriveAnyClass
-    DeriveGeneric
     DerivingStrategies
     DerivingVia
     DuplicateRecordFields
-    FlexibleInstances
     FunctionalDependencies
     GADTs
-    GeneralizedNewtypeDeriving
-    ImportQualifiedPost
-    KindSignatures
-    MultiParamTypeClasses
     NegativeLiterals
     OverloadedStrings
-    PolyKinds
-    ScopedTypeVariables
-    StandaloneDeriving
     StandaloneKindSignatures
     StrictData
-    TypeApplications
     TypeFamilies
-    TypeOperators
     UndecidableInstances
 
   build-depends:
-    , aeson             >=1.2.2.0 && <2.3
-    , base              >=4.11    && <5
-    , binary
-    , containers
-    , data-default
-    , deepseq
-    , Diff              >=0.2
-    , dlist
-    , exceptions
-    , hashable          >=1.3.4.0
-    , indexed-traversable
-    , indexed-traversable-instances
-    , lens              >=4.15.2
-    , lens-aeson
-    , mod
-    , mtl               <2.4
-    , prettyprinter     
-    , network-uri       >=2.6
-    , row-types         >=1.0
-    , safe
-    , some
-    , template-haskell
-    , text
-    -- needed for aeson < 1
-    , unordered-containers
+    , aeson                          >=2     && <2.3
+    , base                           >=4.11  && <5
+    , binary                         ^>=0.8
+    , containers                     ^>=0.6
+    , data-default                   ^>=0.7
+    , deepseq                        >=1.4   && <1.6
+    , Diff                           >=0.4   && <0.6
+    , dlist                          ^>=1.0
+    , exceptions                     ^>=0.10
+    , hashable                       ^>=1.4
+    , indexed-traversable            ^>=0.1
+    , indexed-traversable-instances  ^>=0.1
+    , lens                           >=5.1   && <5.3
+    , lens-aeson                     ^>=1.2
+    , mod                            ^>=0.2
+    , mtl                            >=2.2   && <2.4
+    , network-uri                    ^>=2.6
+    , prettyprinter                  ^>=1.7
+    , row-types                      ^>=1.0
+    , safe                           ^>=0.3
+    , some                           ^>=1.0
+    , template-haskell               >=2.7   && <2.22
+    , text                           >=1     && <2.2
 
+  -- This version of filepath comes with GHC 9.6, so
+  -- we should be able to drop this flag once we only
+  -- support 9.6 or higher
   if flag(force-ospath)
-    build-depends: filepath ^>=1.4.100.0
+    build-depends: filepath >=1.4.100.0 && < 1.6
+
   else
-    build-depends: filepath
+    build-depends: filepath >=1.4 && < 1.6
 
   ghc-options:
     -Wall -Wmissing-deriving-strategies
@@ -109,9 +101,10 @@
     Data.Row.Aeson
     Data.Row.Hashable
     Language.LSP.Protocol.Capabilities
+    Language.LSP.Protocol.Lens
     Language.LSP.Protocol.Message
     Language.LSP.Protocol.Types
-    Language.LSP.Protocol.Lens
+    Language.LSP.Protocol.Meta
     Language.LSP.Protocol.Utils.Misc
     Language.LSP.Protocol.Utils.SMethodMap
 
@@ -138,6 +131,7 @@
     Language.LSP.Protocol.Types.Uri.OsPath
     Language.LSP.Protocol.Types.WatchKinds
 
+
   -- The generated modules
   -- In principle these could be in a separate component,
   -- but a) the generated modules depend on some of the common code
@@ -145,7 +139,7 @@
   -- It's simpler to just have everything in together, otherwise we'd
   -- actually need three layers!
   other-modules:
-    Language.LSP.Protocol.Internal.Lens
+    Language.LSP.Protocol.Internal.Meta
     Language.LSP.Protocol.Internal.Method
     Language.LSP.Protocol.Internal.Types
     Language.LSP.Protocol.Internal.Types.AnnotatedTextEdit
@@ -519,30 +513,62 @@
 library metamodel
   -- We don't currently re-export this from the main
   -- library, but it's here if people want it
-  visibility: public
+  visibility:         public
   hs-source-dirs:     metamodel
-  default-language:   Haskell2010
-  default-extensions: StrictData ImportQualifiedPost
+  default-language:   GHC2021
+  default-extensions:
+    StrictData
+
   exposed-modules:
     Language.LSP.MetaModel
     Language.LSP.MetaModel.Types
 
   build-depends:
-    , aeson             >=1.2.2.0
+    , aeson             >=2
     , base              >=4.11    && <5
-    , file-embed
-    , lens              >=4.15.2
+    , file-embed        ^>=0.0.15
+    , lens              >=5.1     && <5.3
+    , template-haskell  >=2.7     && <2.22
+    , text              >=1       && <2.2
+
+library lsp-types-quickcheck
+  visibility:         public
+  hs-source-dirs:     quickcheck generated
+  default-language:   GHC2021
+  default-extensions:
+    StrictData
+    DerivingVia
+    DerivingStrategies
+
+  exposed-modules:
+    Language.LSP.Protocol.QuickCheck
+
+  other-modules:
+    Language.LSP.Protocol.QuickCheck.Common
+    Language.LSP.Protocol.QuickCheck.Message
+    Language.LSP.Protocol.QuickCheck.Types
+
+  build-depends:
+    , aeson             >=2
+    , base              >=4.11    && <5
+    , lsp-types
+    , row-types
+    , QuickCheck
+    , quickcheck-instances
+    , generic-arbitrary
     , template-haskell
-    , text
+    , text              >=1       && <2.2
 
 executable generator
   hs-source-dirs:     generator
-  default-language:   Haskell2010
-  default-extensions: StrictData ImportQualifiedPost
+  default-language:   GHC2021
+  default-extensions:
+    StrictData
+
   main-is:            Main.hs
   other-modules:      CodeGen
   build-depends:
-    , base                 >=4.11 && <5
+    , base
     , containers
     , directory
     , filepath
@@ -555,8 +581,7 @@
 test-suite lsp-types-test
   type:               exitcode-stdio-1.0
   hs-source-dirs:     test
-  default-language:   Haskell2010
-  default-extensions: ImportQualifiedPost
+  default-language:   GHC2021
   main-is:            Main.hs
   other-modules:
     CapabilitiesSpec
@@ -571,14 +596,14 @@
     WorkspaceEditSpec
 
   ghc-options:        -threaded -rtsopts -with-rtsopts=-N -Wall
-
   build-depends:
-    , aeson                 >=2.0.3.0
+    , aeson
     , base
     , filepath
     , hspec
-    , lens                  >=4.15.2
+    , lens
     , lsp-types
+    , lsp-types-quickcheck
     , network-uri
     , QuickCheck
     , quickcheck-instances
diff --git a/metamodel/Language/LSP/MetaModel/Types.hs b/metamodel/Language/LSP/MetaModel/Types.hs
--- a/metamodel/Language/LSP/MetaModel/Types.hs
+++ b/metamodel/Language/LSP/MetaModel/Types.hs
@@ -1,14 +1,10 @@
 {-# LANGUAGE DataKinds #-}
-{-# LANGUAGE DeriveLift #-}
 {-# LANGUAGE DerivingStrategies #-}
 {-# LANGUAGE DuplicateRecordFields #-}
 {-# LANGUAGE GADTs #-}
-{-# LANGUAGE KindSignatures #-}
 {-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE TemplateHaskell #-}
-{-# LANGUAGE TypeApplications #-}
 
 {- |
 This defines the types of the LSP "metamodel", which is a machine-readable format specifying the
diff --git a/quickcheck/Language/LSP/Protocol/QuickCheck.hs b/quickcheck/Language/LSP/Protocol/QuickCheck.hs
new file mode 100644
--- /dev/null
+++ b/quickcheck/Language/LSP/Protocol/QuickCheck.hs
@@ -0,0 +1,6 @@
+-- | Provides 'Arbitrary' instances for protocol types.
+module Language.LSP.Protocol.QuickCheck (module Export) where
+
+import Language.LSP.Protocol.QuickCheck.Common as Export
+import Language.LSP.Protocol.QuickCheck.Message as Export
+import Language.LSP.Protocol.QuickCheck.Types as Export
diff --git a/quickcheck/Language/LSP/Protocol/QuickCheck/Common.hs b/quickcheck/Language/LSP/Protocol/QuickCheck/Common.hs
new file mode 100644
--- /dev/null
+++ b/quickcheck/Language/LSP/Protocol/QuickCheck/Common.hs
@@ -0,0 +1,44 @@
+{-# LANGUAGE UndecidableInstances #-}
+
+module Language.LSP.Protocol.QuickCheck.Common where
+
+import Data.Foldable
+import Data.Row qualified as R
+import Data.Row.Records qualified as R
+import Data.Void
+import GHC.TypeLits
+import Language.LSP.Protocol.Message
+import Language.LSP.Protocol.Types
+import Test.QuickCheck
+import Test.QuickCheck.Instances ()
+
+instance (Arbitrary a, Arbitrary b) => Arbitrary (a |? b) where
+  arbitrary = oneof [InL <$> arbitrary, InR <$> arbitrary]
+  shrink = genericShrink
+
+instance Arbitrary Null where
+  arbitrary = pure Null
+
+instance (R.AllUniqueLabels r, R.Forall r Arbitrary) => Arbitrary (R.Rec r) where
+  arbitrary = R.fromLabelsA @Arbitrary $ \_l -> arbitrary
+  shrink record = R.traverse @Arbitrary @[] shrink record
+
+instance Arbitrary UInt where
+  arbitrary = fromInteger <$> arbitrary
+
+instance Arbitrary Uri where
+  arbitrary = Uri <$> arbitrary
+  shrink = genericShrink
+
+instance Arbitrary (LspId m) where
+  arbitrary = oneof [IdInt <$> arbitrary, IdString <$> arbitrary]
+  shrink = genericShrink
+
+instance (LspEnum a) => Arbitrary (AsLspEnum a) where
+  arbitrary = elements $ AsLspEnum <$> toList knownValues
+
+instance (KnownSymbol s) => Arbitrary (AString s) where
+  arbitrary = pure $ AString
+
+instance (KnownNat n) => Arbitrary (AnInteger n) where
+  arbitrary = pure $ AnInteger
diff --git a/quickcheck/Language/LSP/Protocol/QuickCheck/Message.hs b/quickcheck/Language/LSP/Protocol/QuickCheck/Message.hs
new file mode 100644
--- /dev/null
+++ b/quickcheck/Language/LSP/Protocol/QuickCheck/Message.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE UndecidableInstances #-}
+-- See Note [Arbitary Maybe Void]
+{-# OPTIONS_GHC -Wno-simplifiable-class-constraints #-}
+
+module Language.LSP.Protocol.QuickCheck.Message where
+
+import Data.Row qualified as R
+import Data.Row.Records qualified as R
+import Data.Void
+import Language.LSP.Protocol.Message
+import Language.LSP.Protocol.QuickCheck.Types
+import Language.LSP.Protocol.Types
+import Test.QuickCheck
+import Test.QuickCheck.Arbitrary.Generic
+import Test.QuickCheck.Instances ()
+
+deriving via (GenericArbitrary RequestMessage) instance Arbitrary RequestMessage
+deriving via (GenericArbitrary ResponseMessage) instance Arbitrary ResponseMessage
+deriving via (GenericArbitrary NotificationMessage) instance Arbitrary NotificationMessage
+
+-- See Note [Arbitary Maybe Void]
+instance {-# OVERLAPS #-} Arbitrary (Maybe Void) where
+  arbitrary = pure Nothing
+
+-- FIXME: there is something funny with the way we're representing error data.
+-- Should be able to have these instances!
+{-
+deriving via (GenericArbitrary ResponseError) instance Arbitrary ResponseError
+
+deriving via
+  (GenericArbitrary (TResponseError m))
+  instance
+    (Arbitrary (ErrorData m)) => Arbitrary (TResponseError m)
+
+deriving via
+  (GenericArbitrary (TResponseMEssage m))
+  instance
+    (Arbitrary (MessageResult m), Arbitrary (ErrorData m)) => Arbitrary (TResponseMEssage m)
+-}
+
+instance (ErrorData m ~ Maybe Void) => Arbitrary (TResponseError m) where
+  arbitrary = TResponseError <$> arbitrary <*> arbitrary <*> pure Nothing
+  shrink = genericShrink
+
+instance Arbitrary ResponseError where
+  arbitrary = ResponseError <$> arbitrary <*> arbitrary <*> pure Nothing
+  shrink = genericShrink
+
+-- See Note [Arbitary Maybe Void]
+deriving via
+  (GenericArbitrary (TResponseMessage m))
+  instance
+    (Arbitrary (MessageResult m), ErrorData m ~ Maybe Void) => Arbitrary (TResponseMessage m)
+
+-- These require a method singleton. We need something like SingI from
+-- singletons to pass that into the class instance
+{-
+instance (Arbitrary (MessageParams m)) => Arbitrary (TRequestMessage m) where
+  arbitrary = TRequestMessage <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+  shrink = genericShrink
+
+instance (Arbitrary (MessageParams m)) => Arbitrary (TNotificationMessage m) where
+  arbitrary = TNotificationMessage <$> arbitrary <*> arbitrary <*> arbitrary
+  shrink = genericShrink
+-}
+
+{- Note [Arbitary Maybe Void]
+For methods that don't have error data, we say that their error data type is 'Void'.
+This means that the error data field has type 'Maybe Void', i.e. can only be 'Nothing',
+which is what we want.
+
+However, we have a problem with the Arbitrary instance. There is an 'Arbitrary (Maybe a)'
+instance which depends on an 'Arbitrary a' instance - but there is no 'Arbitrary Void'
+instance, and apparently can't be since we can't make an empty generator.
+
+So we cheat a bit:
+- Define an overlapping 'Arbitrary (Maybe Void)' instance
+- Define the instances for response messages to require 'Arbitrary (Maybe (ErrorData m))',
+  which delays GHC picking the actual instance until the use site, so it can pick
+  the overlapping one.
+-}
diff --git a/quickcheck/Language/LSP/Protocol/QuickCheck/Types.hs b/quickcheck/Language/LSP/Protocol/QuickCheck/Types.hs
new file mode 100644
--- /dev/null
+++ b/quickcheck/Language/LSP/Protocol/QuickCheck/Types.hs
@@ -0,0 +1,27 @@
+{-# LANGUAGE TemplateHaskell #-}
+
+module Language.LSP.Protocol.QuickCheck.Types where
+
+import Data.Traversable
+import Language.Haskell.TH
+import Language.LSP.Protocol.Meta
+import Language.LSP.Protocol.QuickCheck.Common
+import Language.LSP.Protocol.Types
+import Test.QuickCheck
+import Test.QuickCheck.Arbitrary.Generic
+
+$( let
+    sderiving = for structNames $ \sname ->
+      let viaT = ConT ''GenericArbitrary `AppT` ConT sname
+          arb = ConT ''Arbitrary `AppT` ConT sname
+       in pure $ StandaloneDerivD (Just (ViaStrategy viaT)) [] arb
+    aderiving = for aliasNames $ \aname ->
+      let arb = ConT ''Arbitrary `AppT` ConT aname
+       in pure $ StandaloneDerivD (Just NewtypeStrategy) [] arb
+    ederiving = for enumNames $ \ename ->
+      let viaT = ConT ''AsLspEnum `AppT` ConT ename
+          arb = ConT ''Arbitrary `AppT` ConT ename
+       in pure $ StandaloneDerivD (Just (ViaStrategy viaT)) [] arb
+    in
+    mconcat <$> sequence [sderiving, aderiving, ederiving]
+ )
diff --git a/src/Data/IxMap.hs b/src/Data/IxMap.hs
--- a/src/Data/IxMap.hs
+++ b/src/Data/IxMap.hs
@@ -1,6 +1,3 @@
-{-# LANGUAGE BangPatterns #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE RankNTypes #-}
 {-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE TypeInType #-}
 {-# LANGUAGE ViewPatterns #-}
diff --git a/src/Data/Row/Aeson.hs b/src/Data/Row/Aeson.hs
--- a/src/Data/Row/Aeson.hs
+++ b/src/Data/Row/Aeson.hs
@@ -1,8 +1,3 @@
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE TypeApplications #-}
-{-# LANGUAGE TypeOperators #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# OPTIONS_GHC -Wno-orphans #-}
 
@@ -31,6 +26,8 @@
 import Data.Proxy
 import Data.String
 
+import Language.LSP.Protocol.Types.Common ((.:!?))
+
 -- `aeson` does not need such a typeclass because it generates code per-instance
 -- that handles this, whereas we want to work generically.
 
@@ -54,8 +51,8 @@
   parseJSONEntry :: Object -> String -> Parser a
 
 instance {-# OVERLAPPING #-} FromJSON a => FromJSONEntry (Maybe a) where
-  -- Parse Nothing fields as optional
-  parseJSONEntry o k = o .:? (fromString k)
+  -- Parse Nothing fields as optional, accepting Null to mean "missing"
+  parseJSONEntry o k = o .:!? (fromString k)
 
 instance {-# OVERLAPPABLE #-} FromJSON a => FromJSONEntry a where
   parseJSONEntry o k = o .: (fromString k)
diff --git a/src/Data/Row/Hashable.hs b/src/Data/Row/Hashable.hs
--- a/src/Data/Row/Hashable.hs
+++ b/src/Data/Row/Hashable.hs
@@ -1,8 +1,3 @@
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE TypeApplications #-}
-{-# LANGUAGE TypeOperators #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# OPTIONS_GHC -Wno-orphans #-}
 
diff --git a/src/Language/LSP/Protocol/Capabilities.hs b/src/Language/LSP/Protocol/Capabilities.hs
--- a/src/Language/LSP/Protocol/Capabilities.hs
+++ b/src/Language/LSP/Protocol/Capabilities.hs
@@ -1,8 +1,6 @@
 {-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE OverloadedLabels #-}
 {-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE RankNTypes #-}
 
 module Language.LSP.Protocol.Capabilities (
   fullCaps,
diff --git a/src/Language/LSP/Protocol/Lens.hs b/src/Language/LSP/Protocol/Lens.hs
--- a/src/Language/LSP/Protocol/Lens.hs
+++ b/src/Language/LSP/Protocol/Lens.hs
@@ -1,12 +1,8 @@
 module Language.LSP.Protocol.Lens (
   -- * Generated lens classes
-  module Lens,
-  -- Custom lets classes for Type
   module TypesLens,
-  -- Custom lens classes for Message
   module MessageLens,
 ) where
 
-import Language.LSP.Protocol.Internal.Lens as Lens
 import Language.LSP.Protocol.Message.Lens as MessageLens
 import Language.LSP.Protocol.Types.Lens as TypesLens
diff --git a/src/Language/LSP/Protocol/Message/Lens.hs b/src/Language/LSP/Protocol/Message/Lens.hs
--- a/src/Language/LSP/Protocol/Message/Lens.hs
+++ b/src/Language/LSP/Protocol/Message/Lens.hs
@@ -4,9 +4,9 @@
 module Language.LSP.Protocol.Message.Lens where
 
 import Control.Lens.TH
-import Language.LSP.Protocol.Internal.Lens
 import Language.LSP.Protocol.Message.Registration
 import Language.LSP.Protocol.Message.Types
+import Language.LSP.Protocol.Types.Lens
 
 makeFieldsNoPrefix ''TRegistration
 makeFieldsNoPrefix ''TUnregistration
diff --git a/src/Language/LSP/Protocol/Message/Method.hs b/src/Language/LSP/Protocol/Message/Method.hs
--- a/src/Language/LSP/Protocol/Message/Method.hs
+++ b/src/Language/LSP/Protocol/Message/Method.hs
@@ -1,12 +1,8 @@
-{-# LANGUAGE ConstraintKinds #-}
-{-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE MagicHash #-}
 {-# LANGUAGE QuantifiedConstraints #-}
-{-# LANGUAGE RankNTypes #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE TypeInType #-}
-{-# LANGUAGE TypeOperators #-}
 {-# LANGUAGE UndecidableSuperClasses #-}
 {-# OPTIONS_GHC -Wno-orphans #-}
 
diff --git a/src/Language/LSP/Protocol/Message/Parsing.hs b/src/Language/LSP/Protocol/Message/Parsing.hs
--- a/src/Language/LSP/Protocol/Message/Parsing.hs
+++ b/src/Language/LSP/Protocol/Message/Parsing.hs
@@ -1,7 +1,4 @@
-{-# LANGUAGE ConstraintKinds #-}
-{-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE LambdaCase #-}
-{-# LANGUAGE RankNTypes #-}
 {-# LANGUAGE TypeInType #-}
 
 module Language.LSP.Protocol.Message.Parsing where
diff --git a/src/Language/LSP/Protocol/Message/Registration.hs b/src/Language/LSP/Protocol/Message/Registration.hs
--- a/src/Language/LSP/Protocol/Message/Registration.hs
+++ b/src/Language/LSP/Protocol/Message/Registration.hs
@@ -1,10 +1,5 @@
 {-# LANGUAGE DeriveAnyClass #-}
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE ExistentialQuantification #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE RankNTypes #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE TypeInType #-}
 
diff --git a/src/Language/LSP/Protocol/Message/Types.hs b/src/Language/LSP/Protocol/Message/Types.hs
--- a/src/Language/LSP/Protocol/Message/Types.hs
+++ b/src/Language/LSP/Protocol/Message/Types.hs
@@ -1,8 +1,4 @@
-{-# LANGUAGE ConstraintKinds #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE RankNTypes #-}
 {-# LANGUAGE TemplateHaskell #-}
-{-# LANGUAGE TupleSections #-}
 {-# LANGUAGE TypeInType #-}
 
 module Language.LSP.Protocol.Message.Types where
@@ -12,7 +8,6 @@
 import Language.LSP.Protocol.Message.Meta
 import Language.LSP.Protocol.Message.Method ()
 import Language.LSP.Protocol.Types
-import Language.LSP.Protocol.Types.Common
 import Language.LSP.Protocol.Utils.Misc
 
 import Data.Aeson hiding (Null)
@@ -84,7 +79,7 @@
           ResponseError
             <$> v .: "code"
             <*> v .: "message"
-            <*> v .:? "data"
+            <*> v .:!? "data"
      in fmap go . errorCode
    where
     go :: ResponseError -> ResponseError
@@ -176,7 +171,7 @@
           TResponseError
             <$> v .: "code"
             <*> v .: "message"
-            <*> v .:? "data"
+            <*> v .:!? "data"
      in fmap go . errorCode
    where
     go :: TResponseError m -> TResponseError m
@@ -219,9 +214,8 @@
   parseJSON = withObject "Response" $ \o -> do
     _jsonrpc <- o .: "jsonrpc"
     _id <- o .: "id"
-    -- It is important to use .:! so that "result = null" (without error) gets decoded as Just Null
-    _result <- o .:! "result"
-    _error <- o .:? "error"
+    _result <- o .:!? "result"
+    _error <- o .:!? "error"
     result <- case (_error, _result) of
       (Just err, Nothing) -> pure $ Left err
       (Nothing, Just res) -> pure $ Right res
diff --git a/src/Language/LSP/Protocol/Meta.hs b/src/Language/LSP/Protocol/Meta.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/LSP/Protocol/Meta.hs
@@ -0,0 +1,3 @@
+module Language.LSP.Protocol.Meta (module Export) where
+
+import Language.LSP.Protocol.Internal.Meta as Export
diff --git a/src/Language/LSP/Protocol/Types/Common.hs b/src/Language/LSP/Protocol/Types/Common.hs
--- a/src/Language/LSP/Protocol/Types/Common.hs
+++ b/src/Language/LSP/Protocol/Types/Common.hs
@@ -1,12 +1,8 @@
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE DataKinds #-}
 {-# LANGUAGE DeriveAnyClass #-}
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE DeriveTraversable #-}
 {-# LANGUAGE DerivingStrategies #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE LambdaCase #-}
-{-# LANGUAGE TypeOperators #-}
 
 -- | Common types that aren't in the specification
 module Language.LSP.Protocol.Types.Common (
@@ -21,17 +17,16 @@
   nullToMaybe,
   maybeToNull,
   (.=?),
+  (.:!?),
 ) where
 
+import Control.Applicative
 import Control.DeepSeq
 import Control.Lens
 import Data.Aeson hiding (Null)
 import Data.Aeson qualified as J
-#if MIN_VERSION_aeson(2,0,0)
-import qualified Data.Aeson.KeyMap   as KM
-#else
-import qualified Data.HashMap.Strict   as KM
-#endif
+import Data.Aeson.KeyMap qualified as KM
+import Data.Aeson.Types qualified as J
 import Data.Hashable
 import Data.Int (Int32)
 import Data.Mod.Word
@@ -191,3 +186,30 @@
 k .=? v = case v of
   Just v' -> [fromString k J..= v']
   Nothing -> mempty
+
+{- |
+Parse a value optionally. This behaves similarly to 'J..:!' and
+'J..:?', but differs in how it handles 'Null':
+
+    * If 'Null' can be converted to the desired type...
+        * 'J.:?': the result is success with 'Nothing'
+        * 'J.:!': the result is success with 'Just <value>'
+        * '.:!?': the result is success with 'Just <value>'
+    * If 'Null' cannot be converted to the desired type...
+        * 'J.:?': the result is success with 'Nothing'
+        * 'J.:!': the result is failure
+        * '.:!?': the result is success with 'Nothing'
+
+That is, we allow 'Null' to mean either 'Nothing' or 'Just <value>',
+with the latter taking priority.
+-}
+(.:!?) :: (J.FromJSON v) => Object -> Key -> J.Parser (Maybe v)
+o .:!? k =
+  -- If 'Null' can be converted to the desired type this succeeds
+  -- with Just the converted value
+  o J..:! k
+    -- otherwise...
+    <|>
+    -- If 'Null' cannot be converted to the desired type this succeeds
+    -- with Nothing
+    o J..:? k
diff --git a/src/Language/LSP/Protocol/Types/Edit.hs b/src/Language/LSP/Protocol/Types/Edit.hs
--- a/src/Language/LSP/Protocol/Types/Edit.hs
+++ b/src/Language/LSP/Protocol/Types/Edit.hs
@@ -1,6 +1,5 @@
 {-# LANGUAGE DuplicateRecordFields #-}
 {-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TypeOperators #-}
 
 module Language.LSP.Protocol.Types.Edit where
 
diff --git a/src/Language/LSP/Protocol/Types/Lens.hs b/src/Language/LSP/Protocol/Types/Lens.hs
--- a/src/Language/LSP/Protocol/Types/Lens.hs
+++ b/src/Language/LSP/Protocol/Types/Lens.hs
@@ -3,9 +3,8 @@
 
 module Language.LSP.Protocol.Types.Lens where
 
-import Control.Lens.TH
-import Language.LSP.Protocol.Internal.Lens
+import Language.LSP.Protocol.Internal.Meta
 import Language.LSP.Protocol.Types.SemanticTokens
+import Language.LSP.Protocol.Utils.Misc
 
-makeFieldsNoPrefix ''SemanticTokenAbsolute
-makeFieldsNoPrefix ''SemanticTokenRelative
+$(genLenses (structNames ++ [''SemanticTokenAbsolute, ''SemanticTokenRelative]))
diff --git a/src/Language/LSP/Protocol/Types/LspEnum.hs b/src/Language/LSP/Protocol/Types/LspEnum.hs
--- a/src/Language/LSP/Protocol/Types/LspEnum.hs
+++ b/src/Language/LSP/Protocol/Types/LspEnum.hs
@@ -42,17 +42,17 @@
 {- | Newtype for @deriving via@ to get standard JSON and 'IsString' instances in terms of the 'LspEnum'
  class methods.
 -}
-newtype AsLspEnum a b = AsLspEnum a
+newtype AsLspEnum a = AsLspEnum a
 
-instance (LspEnum a, EnumBaseType a ~ b, Aeson.ToJSON b) => Aeson.ToJSON (AsLspEnum a b) where
+instance (LspEnum a, EnumBaseType a ~ b, Aeson.ToJSON b) => Aeson.ToJSON (AsLspEnum a) where
   toJSON (AsLspEnum e) = Aeson.toJSON (toEnumBaseType e)
 
-instance (LspEnum a, EnumBaseType a ~ b, Aeson.FromJSON b, Show b) => Aeson.FromJSON (AsLspEnum a b) where
+instance (LspEnum a, EnumBaseType a ~ b, Aeson.FromJSON b, Show b) => Aeson.FromJSON (AsLspEnum a) where
   parseJSON val = do
     v <- Aeson.parseJSON val
     case fromEnumBaseType v of
       Just x -> pure $ AsLspEnum x
       Nothing -> fail $ "unrecognized enum value " ++ show v
 
-instance (LspOpenEnum a, EnumBaseType a ~ b, b ~ Text.Text) => IsString (AsLspEnum a b) where
+instance (LspOpenEnum a, EnumBaseType a ~ b, b ~ Text.Text) => IsString (AsLspEnum a) where
   fromString s = AsLspEnum $ fromOpenEnumBaseType (Text.pack s)
diff --git a/src/Language/LSP/Protocol/Types/SemanticTokens.hs b/src/Language/LSP/Protocol/Types/SemanticTokens.hs
--- a/src/Language/LSP/Protocol/Types/SemanticTokens.hs
+++ b/src/Language/LSP/Protocol/Types/SemanticTokens.hs
@@ -1,7 +1,6 @@
 {-# LANGUAGE DuplicateRecordFields #-}
 {-# LANGUAGE OverloadedLists #-}
 {-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE ScopedTypeVariables #-}
 
 module Language.LSP.Protocol.Types.SemanticTokens where
 
diff --git a/src/Language/LSP/Protocol/Types/Uri.hs b/src/Language/LSP/Protocol/Types/Uri.hs
--- a/src/Language/LSP/Protocol/Types/Uri.hs
+++ b/src/Language/LSP/Protocol/Types/Uri.hs
@@ -1,10 +1,5 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-{-# LANGUAGE InstanceSigs #-}
 {-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE RankNTypes #-}
 {-# LANGUAGE RecordWildCards #-}
-{-# LANGUAGE TypeSynonymInstances #-}
 
 module Language.LSP.Protocol.Types.Uri (
   Uri (..),
diff --git a/src/Language/LSP/Protocol/Types/Uri/OsPath.hs b/src/Language/LSP/Protocol/Types/Uri/OsPath.hs
--- a/src/Language/LSP/Protocol/Types/Uri/OsPath.hs
+++ b/src/Language/LSP/Protocol/Types/Uri/OsPath.hs
@@ -1,7 +1,6 @@
 {- ORMOLU_DISABLE -}
 
 {-# LANGUAGE CPP                 #-}
-{-# LANGUAGE ScopedTypeVariables #-}
 
 #if MIN_VERSION_filepath(1,4,100)
 #define OS_PATH 1
diff --git a/src/Language/LSP/Protocol/Types/WatchKinds.hs b/src/Language/LSP/Protocol/Types/WatchKinds.hs
--- a/src/Language/LSP/Protocol/Types/WatchKinds.hs
+++ b/src/Language/LSP/Protocol/Types/WatchKinds.hs
@@ -7,7 +7,7 @@
 -- WatchKind is better represented as a Set than as enum. As the lsp spec
 -- defines them as an enum, these helper functions help bridge the difference.
 
--- |Tests whether `WatchKind_Create` is contained in the provided WatchKind enum
+-- | Tests whether `WatchKind_Create` is contained in the provided WatchKind enum
 containsCreate :: WatchKind -> Bool
 containsCreate WatchKind_Create = True
 containsCreate (WatchKind_Custom 3) = True
@@ -15,7 +15,7 @@
 containsCreate (WatchKind_Custom 7) = True
 containsCreate _ = False
 
--- |Tests whether `WatchKind_Change` is contained in the provided WatchKind enum
+-- | Tests whether `WatchKind_Change` is contained in the provided WatchKind enum
 containsChange :: WatchKind -> Bool
 containsChange WatchKind_Change = True
 containsChange (WatchKind_Custom 3) = True
@@ -23,7 +23,7 @@
 containsChange (WatchKind_Custom 7) = True
 containsChange _ = False
 
--- |Tests whether `WatchKind_Delete` is contained in the provided WatchKind enum
+-- | Tests whether `WatchKind_Delete` is contained in the provided WatchKind enum
 containsDelete :: WatchKind -> Bool
 containsDelete WatchKind_Delete = True
 containsDelete (WatchKind_Custom 5) = True
@@ -31,7 +31,7 @@
 containsDelete (WatchKind_Custom 7) = True
 containsDelete _ = False
 
-{- |Combine a set of WatchKind types into a new WatchKind type that accurately
+{- | Combine a set of WatchKind types into a new WatchKind type that accurately
  represents the set
 -}
 combineWatchKinds :: Set WatchKind -> WatchKind
diff --git a/src/Language/LSP/Protocol/Utils/Misc.hs b/src/Language/LSP/Protocol/Utils/Misc.hs
--- a/src/Language/LSP/Protocol/Utils/Misc.hs
+++ b/src/Language/LSP/Protocol/Utils/Misc.hs
@@ -1,5 +1,4 @@
 {-# LANGUAGE LambdaCase #-}
-{-# LANGUAGE RankNTypes #-}
 {-# LANGUAGE TemplateHaskell #-}
 
 module Language.LSP.Protocol.Utils.Misc (
@@ -10,9 +9,13 @@
   lspOptionsUntagged,
   prettyJSON,
   ViaJSON (..),
+  genLenses,
 ) where
 
+import Control.Lens.Internal.FieldTH
+import Control.Lens.TH
 import Control.Monad
+import Control.Monad.State
 import Data.Aeson
 import Data.Aeson.Text as Aeson
 import Data.Foldable qualified as F
@@ -20,7 +23,7 @@
 import Data.Functor.WithIndex.Instances qualified ()
 import Data.List hiding (group)
 import Data.Maybe (mapMaybe)
-import Language.Haskell.TH
+import Language.Haskell.TH as TH
 import Prettyprinter
 
 -- ---------------------------------------------------------------------
@@ -133,3 +136,18 @@
 
 instance ToJSON a => Pretty (ViaJSON a) where
   pretty (ViaJSON a) = prettyJSON $ toJSON a
+
+{- | Given a list of type names, make a splice that generates the lens typeclass declarations
+for all of them. Defined here to avoid stage restrictions.
+-}
+genLenses :: [TH.Name] -> TH.Q [TH.Dec]
+genLenses names = do
+  let
+    -- We need to use the internals of the lens TH machinery so that we can do this
+    -- in one go without generating duplicate classes.
+    opticMaker :: TH.Name -> HasFieldClasses [TH.Dec]
+    opticMaker n = do
+      (TH.TyConI d) <- lift $ TH.reify n
+      makeFieldOpticsForDec' classUnderscoreNoPrefixFields d
+  decss <- flip evalStateT mempty $ traverse opticMaker names
+  pure $ concat decss
diff --git a/src/Language/LSP/Protocol/Utils/SMethodMap.hs b/src/Language/LSP/Protocol/Utils/SMethodMap.hs
--- a/src/Language/LSP/Protocol/Utils/SMethodMap.hs
+++ b/src/Language/LSP/Protocol/Utils/SMethodMap.hs
@@ -1,8 +1,6 @@
 {-# LANGUAGE DataKinds #-}
 {-# LANGUAGE GADTs #-}
 {-# LANGUAGE MagicHash #-}
-{-# LANGUAGE PolyKinds #-}
-{-# LANGUAGE RankNTypes #-}
 
 module Language.LSP.Protocol.Utils.SMethodMap (
   SMethodMap,
diff --git a/test/JsonSpec.hs b/test/JsonSpec.hs
--- a/test/JsonSpec.hs
+++ b/test/JsonSpec.hs
@@ -1,18 +1,11 @@
 {-# LANGUAGE DerivingStrategies #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE OverloadedLabels #-}
 {-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE StandaloneDeriving #-}
-{-# LANGUAGE TypeApplications #-}
 {-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE TypeInType #-}
-{-# LANGUAGE TypeOperators #-}
 {-# LANGUAGE UndecidableInstances #-}
 -- we're using some deprecated stuff from the LSP spec, that's fine
 {-# OPTIONS_GHC -fno-warn-deprecations #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
 
 -- | Test for JSON serialization
 module JsonSpec where
@@ -20,65 +13,74 @@
 import Language.LSP.Protocol.Message
 import Language.LSP.Protocol.Types
 
+import Language.LSP.Protocol.QuickCheck ()
+
 import Data.Aeson qualified as J
 import Data.List (isPrefixOf)
-import Data.Row qualified as R
-import Data.Row.Records qualified as R
-import Data.Void
+import Data.Row
 import Test.Hspec
 import Test.Hspec.QuickCheck
 import Test.QuickCheck hiding (Success)
 import Test.QuickCheck.Instances ()
 
--- import Debug.Trace
 -- ---------------------------------------------------------------------
 
 {-# ANN module ("HLint: ignore Redundant do" :: String) #-}
 
-main :: IO ()
-main = hspec spec
-
 spec :: Spec
 spec = do
-  describe "dispatcher" jsonSpec
-  describe "RequestMessage" requestMessageSpec
-  describe "ResponseMessage" responseMessageSpec
-  describe "NotificationMesssage" notificationMessageSpec
+  describe "MarkedString" $ do
+    prop "roundtrip" (propertyJsonRoundtrip :: MarkedString -> Property)
 
--- ---------------------------------------------------------------------
+  describe "MarkupContent" $ do
+    prop "roundtrip" (propertyJsonRoundtrip :: MarkupContent -> Property)
 
-jsonSpec :: Spec
-jsonSpec = do
-  describe "General JSON instances round trip" $ do
-    -- DataTypesJSON
-    prop "MarkedString" (propertyJsonRoundtrip :: MarkedString -> Property)
-    prop "MarkupContent" (propertyJsonRoundtrip :: MarkupContent -> Property)
-    prop "TextDocumentContentChangeEvent" (propertyJsonRoundtrip :: TextDocumentContentChangeEvent -> Property)
-    prop "WatchedFiles" (propertyJsonRoundtrip :: DidChangeWatchedFilesRegistrationOptions -> Property)
-    prop
-      "ResponseMessage Hover"
-      (propertyJsonRoundtrip :: TResponseMessage 'Method_TextDocumentHover -> Property)
-  describe "JSON decoding regressions" $
-    it "CompletionItem" $
+  describe "TextDocumentContentChangeEvent" $ do
+    prop "roundtrip" (propertyJsonRoundtrip :: TextDocumentContentChangeEvent -> Property)
+
+  describe "WatchedFiles" $ do
+    prop "roundtrip" (propertyJsonRoundtrip :: DidChangeWatchedFilesRegistrationOptions -> Property)
+
+  describe "Registration" $ do
+    -- Registration has a 'Maybe Value' field, so this test checks that 'Maybe Null' roundtrips properly
+    prop "roundtrip" (propertyJsonRoundtrip :: Registration -> Property)
+
+  describe "CompletionList" $ do
+    it "handles optional field set to null in record" $ do
+      J.eitherDecode "{ \"isIncomplete\" : true, \"itemDefaults\" : { \"data\" : null }, \"items\": [] }"
+        `shouldBe` Right
+          ( CompletionList
+              True
+              (Just (#commitCharacters .== Nothing .+ #editRange .== Nothing .+ #insertTextFormat .== Nothing .+ #insertTextMode .== Nothing .+ #data .== Just J.Null))
+              mempty
+          )
+
+  describe "CompletionItem" $ do
+    it "example" $
       (J.decode "{\"jsonrpc\":\"2.0\",\"result\":[{\"label\":\"raisebox\"}],\"id\":1}" :: Maybe (TResponseMessage 'Method_TextDocumentCompletion))
         `shouldNotBe` Nothing
 
-requestMessageSpec :: Spec
-requestMessageSpec = do
-  describe "edge cases" $ do
+  describe "RequestMessage" $ do
     it "handles missing params field" $ do
       J.eitherDecode "{ \"jsonrpc\": \"2.0\", \"id\": 15, \"method\": \"shutdown\"}"
         `shouldBe` Right (TRequestMessage "2.0" (IdInt 15) SMethod_Shutdown Nothing)
+    -- The 'params' field on a RequestMessage is optional _and_ null is _not_ a valid value. Check that we correctly parse null as 'Nothing'
+    it "handles params field set to null" $ do
+      J.eitherDecode "{ \"jsonrpc\": \"2.0\", \"id\": 15, \"method\": \"shutdown\", \"params\": null }"
+        `shouldBe` Right (TRequestMessage "2.0" (IdInt 15) SMethod_Shutdown Nothing)
 
-responseMessageSpec :: Spec
-responseMessageSpec = do
-  describe "edge cases" $ do
-    it "decodes result = null" $ do
-      let input = "{\"jsonrpc\": \"2.0\", \"id\": 123, \"result\": null}"
+  describe "ResponseMessage" $ do
+    prop
+      "Hover roundtrip"
+      (propertyJsonRoundtrip :: TResponseMessage 'Method_TextDocumentHover -> Property)
+    -- The 'data' field on a ResponseError is optional _and_ null is a valid value. Check that we correctly parse null as 'Just Null'
+    it "decodes error data = null" $ do
+      let input = "{\"jsonrpc\": \"2.0\", \"id\": 123, \"error\": { \"code\": -32700, \"message\": \"oh no\", \"data\": null }}"
        in J.decode input
             `shouldBe` Just
-              ((TResponseMessage "2.0" (Just (IdInt 123)) (Right $ InL J.Null)) :: TResponseMessage 'Method_WorkspaceExecuteCommand)
-  describe "invalid JSON" $ do
+              ( (TResponseMessage "2.0" (Just (IdInt 123)) (Left $ ResponseError (InR ErrorCodes_ParseError) "oh no" (Just J.Null))) ::
+                  TResponseMessage ('Method_CustomMethod "hello")
+              )
     it "throws if neither result nor error is present" $ do
       (J.eitherDecode "{\"jsonrpc\":\"2.0\",\"id\":1}" :: Either String (TResponseMessage 'Method_Initialize))
         `shouldBe` Left ("Error in $: both error and result cannot be Nothing")
@@ -88,10 +90,13 @@
           Either String (TResponseMessage 'Method_Initialize)
         )
         `shouldSatisfy` (either (\err -> "Error in $: both error and result cannot be present" `isPrefixOf` err) (\_ -> False))
+    it "decodes result = null" $ do
+      let input = "{\"jsonrpc\": \"2.0\", \"id\": 123, \"result\": null}"
+       in J.decode input
+            `shouldBe` Just
+              ((TResponseMessage "2.0" (Just (IdInt 123)) (Right $ InL J.Null)) :: TResponseMessage 'Method_WorkspaceExecuteCommand)
 
-notificationMessageSpec :: Spec
-notificationMessageSpec = do
-  describe "edge cases" $ do
+  describe "NotificationMessage" $ do
     it "handles missing params field" $ do
       J.eitherDecode "{ \"jsonrpc\": \"2.0\", \"method\": \"exit\"}"
         `shouldBe` Right (TNotificationMessage "2.0" SMethod_Exit Nothing)
@@ -100,125 +105,3 @@
 
 propertyJsonRoundtrip :: (Eq a, Show a, J.ToJSON a, J.FromJSON a) => a -> Property
 propertyJsonRoundtrip a = J.Success a === J.fromJSON (J.toJSON a)
-
--- ---------------------------------------------------------------------
-
-instance (Arbitrary a, Arbitrary b) => Arbitrary (a |? b) where
-  arbitrary = oneof [InL <$> arbitrary, InR <$> arbitrary]
-  shrink = genericShrink
-
-instance Arbitrary Null where
-  arbitrary = pure Null
-
-instance (R.AllUniqueLabels r, R.Forall r Arbitrary) => Arbitrary (R.Rec r) where
-  arbitrary = R.fromLabelsA @Arbitrary $ \_l -> arbitrary
-  shrink record = R.traverse @Arbitrary @[] shrink record
-
-deriving newtype instance Arbitrary MarkedString
-
-instance Arbitrary MarkupContent where
-  arbitrary = MarkupContent <$> arbitrary <*> arbitrary
-  shrink = genericShrink
-
-instance Arbitrary MarkupKind where
-  arbitrary = oneof [pure MarkupKind_PlainText, pure MarkupKind_Markdown]
-  shrink = genericShrink
-
-instance Arbitrary UInt where
-  arbitrary = fromInteger <$> arbitrary
-
-instance Arbitrary Uri where
-  arbitrary = Uri <$> arbitrary
-  shrink = genericShrink
-
--- deriving newtype instance Arbitrary URI
-
-instance Arbitrary WorkspaceFolder where
-  arbitrary = WorkspaceFolder <$> arbitrary <*> arbitrary
-  shrink = genericShrink
-
-instance Arbitrary RelativePattern where
-  arbitrary = RelativePattern <$> arbitrary <*> arbitrary
-  shrink = genericShrink
-
-deriving newtype instance Arbitrary Pattern
-deriving newtype instance Arbitrary GlobPattern
-
-instance Arbitrary Position where
-  arbitrary = Position <$> arbitrary <*> arbitrary
-  shrink = genericShrink
-
-instance Arbitrary Location where
-  arbitrary = Location <$> arbitrary <*> arbitrary
-  shrink = genericShrink
-
-instance Arbitrary Range where
-  arbitrary = Range <$> arbitrary <*> arbitrary
-  shrink = genericShrink
-
-instance Arbitrary Hover where
-  arbitrary = Hover <$> arbitrary <*> arbitrary
-  shrink = genericShrink
-
-instance {-# OVERLAPPING #-} Arbitrary (Maybe Void) where
-  arbitrary = pure Nothing
-
-instance (ErrorData m ~ Maybe Void) => Arbitrary (TResponseError m) where
-  arbitrary = TResponseError <$> arbitrary <*> arbitrary <*> pure Nothing
-  shrink = genericShrink
-
-instance Arbitrary ResponseError where
-  arbitrary = ResponseError <$> arbitrary <*> arbitrary <*> pure Nothing
-  shrink = genericShrink
-
-instance (Arbitrary (MessageResult m), ErrorData m ~ Maybe Void) => Arbitrary (TResponseMessage m) where
-  arbitrary = TResponseMessage <$> arbitrary <*> arbitrary <*> arbitrary
-  shrink = genericShrink
-
-instance Arbitrary (LspId m) where
-  arbitrary = oneof [IdInt <$> arbitrary, IdString <$> arbitrary]
-  shrink = genericShrink
-
-instance Arbitrary ErrorCodes where
-  arbitrary =
-    elements
-      [ ErrorCodes_ParseError
-      , ErrorCodes_InvalidRequest
-      , ErrorCodes_MethodNotFound
-      , ErrorCodes_InvalidParams
-      , ErrorCodes_InternalError
-      , ErrorCodes_ServerNotInitialized
-      , ErrorCodes_UnknownErrorCode
-      ]
-  shrink = genericShrink
-
-instance Arbitrary LSPErrorCodes where
-  arbitrary =
-    elements
-      [ LSPErrorCodes_RequestFailed
-      , LSPErrorCodes_ServerCancelled
-      , LSPErrorCodes_ContentModified
-      , LSPErrorCodes_RequestCancelled
-      ]
-  shrink = genericShrink
-
--- ---------------------------------------------------------------------
-
-instance Arbitrary DidChangeWatchedFilesRegistrationOptions where
-  arbitrary = DidChangeWatchedFilesRegistrationOptions <$> arbitrary
-  shrink = genericShrink
-
-instance Arbitrary FileSystemWatcher where
-  arbitrary = FileSystemWatcher <$> arbitrary <*> arbitrary
-  shrink = genericShrink
-
--- TODO: watchKind is weird
-instance Arbitrary WatchKind where
-  arbitrary = oneof [pure WatchKind_Change, pure WatchKind_Create, pure WatchKind_Delete]
-  shrink = genericShrink
-
--- ---------------------------------------------------------------------
---
-instance Arbitrary TextDocumentContentChangeEvent where
-  arbitrary = TextDocumentContentChangeEvent <$> arbitrary
-  shrink = genericShrink
diff --git a/test/SemanticTokensSpec.hs b/test/SemanticTokensSpec.hs
--- a/test/SemanticTokensSpec.hs
+++ b/test/SemanticTokensSpec.hs
@@ -1,5 +1,4 @@
 {-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TypeApplications #-}
 
 module SemanticTokensSpec where
 
diff --git a/test/ServerCapabilitiesSpec.hs b/test/ServerCapabilitiesSpec.hs
--- a/test/ServerCapabilitiesSpec.hs
+++ b/test/ServerCapabilitiesSpec.hs
@@ -1,6 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
 {-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE ScopedTypeVariables #-}
 
 module ServerCapabilitiesSpec where
 
diff --git a/test/URIFilePathSpec.hs b/test/URIFilePathSpec.hs
--- a/test/URIFilePathSpec.hs
+++ b/test/URIFilePathSpec.hs
@@ -1,6 +1,5 @@
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE ScopedTypeVariables #-}
 -- We're testing our own deprecated function here!
 {-# OPTIONS_GHC -Wno-deprecations #-}
 {-# OPTIONS_GHC -Wno-incomplete-uni-patterns #-}
@@ -14,12 +13,12 @@
 
 #ifdef OS_PATH
 import qualified System.OsPath           as OsPath
+import Control.Exception (throwIO)
+import Data.Maybe (fromJust)
 #endif
 
-import Control.Exception (throwIO)
 import Control.Monad (when)
 import Data.List
-import Data.Maybe (fromJust)
 import Data.Text (Text, pack)
 import Language.LSP.Protocol.Types
 
