diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,11 @@
 # Revision history for lsp-types
 
+## 2.0.2.0
+
+- 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
 
 * Fix parsing of notifications with missing params
diff --git a/generated/Language/LSP/Protocol/Internal/Types/AnnotatedTextEdit.hs b/generated/Language/LSP/Protocol/Internal/Types/AnnotatedTextEdit.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/AnnotatedTextEdit.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/AnnotatedTextEdit.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -39,6 +41,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON AnnotatedTextEdit)
 
 instance Aeson.ToJSON AnnotatedTextEdit where
   toJSON (AnnotatedTextEdit arg0 arg1 arg2) = Aeson.object $ concat $  [["range" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -32,6 +34,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ApplyWorkspaceEditParams)
 
 instance Aeson.ToJSON ApplyWorkspaceEditParams where
   toJSON (ApplyWorkspaceEditParams arg0 arg1) = Aeson.object $ concat $  ["label" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -39,6 +41,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ApplyWorkspaceEditResult)
 
 instance Aeson.ToJSON ApplyWorkspaceEditResult where
   toJSON (ApplyWorkspaceEditResult arg0 arg1 arg2) = Aeson.object $ concat $  [["applied" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -44,6 +46,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON BaseSymbolInformation)
 
 instance Aeson.ToJSON BaseSymbolInformation where
   toJSON (BaseSymbolInformation arg0 arg1 arg2 arg3) = Aeson.object $ concat $  [["name" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -26,6 +28,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CallHierarchyClientCapabilities)
 
 instance Aeson.ToJSON CallHierarchyClientCapabilities where
   toJSON (CallHierarchyClientCapabilities arg0) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyIncomingCall.hs b/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyIncomingCall.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyIncomingCall.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyIncomingCall.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -33,6 +35,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CallHierarchyIncomingCall)
 
 instance Aeson.ToJSON CallHierarchyIncomingCall where
   toJSON (CallHierarchyIncomingCall arg0 arg1) = Aeson.object $ concat $  [["from" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -37,6 +39,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CallHierarchyIncomingCallsParams)
 
 instance Aeson.ToJSON CallHierarchyIncomingCallsParams where
   toJSON (CallHierarchyIncomingCallsParams arg0 arg1 arg2) = Aeson.object $ concat $  ["workDoneToken" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
@@ -63,6 +65,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CallHierarchyItem)
 
 instance Aeson.ToJSON CallHierarchyItem where
   toJSON (CallHierarchyItem arg0 arg1 arg2 arg3 arg4 arg5 arg6 arg7) = Aeson.object $ concat $  [["name" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -26,6 +28,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CallHierarchyOptions)
 
 instance Aeson.ToJSON CallHierarchyOptions where
   toJSON (CallHierarchyOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyOutgoingCall.hs b/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyOutgoingCall.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyOutgoingCall.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CallHierarchyOutgoingCall.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -34,6 +36,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CallHierarchyOutgoingCall)
 
 instance Aeson.ToJSON CallHierarchyOutgoingCall where
   toJSON (CallHierarchyOutgoingCall arg0 arg1) = Aeson.object $ concat $  [["to" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -37,6 +39,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CallHierarchyOutgoingCallsParams)
 
 instance Aeson.ToJSON CallHierarchyOutgoingCallsParams where
   toJSON (CallHierarchyOutgoingCallsParams arg0 arg1 arg2) = Aeson.object $ concat $  ["workDoneToken" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -37,6 +39,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CallHierarchyPrepareParams)
 
 instance Aeson.ToJSON CallHierarchyPrepareParams where
   toJSON (CallHierarchyPrepareParams arg0 arg1 arg2) = Aeson.object $ concat $  [["textDocument" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -38,6 +40,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CallHierarchyRegistrationOptions)
 
 instance Aeson.ToJSON CallHierarchyRegistrationOptions where
   toJSON (CallHierarchyRegistrationOptions arg0 arg1 arg2) = Aeson.object $ concat $  [["documentSelector" Aeson..= arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CancelParams.hs b/generated/Language/LSP/Protocol/Internal/Types/CancelParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CancelParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CancelParams.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -25,6 +27,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CancelParams)
 
 instance Aeson.ToJSON CancelParams where
   toJSON (CancelParams arg0) = Aeson.object $ concat $  [["id" Aeson..= arg0]]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -38,6 +40,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ChangeAnnotation)
 
 instance Aeson.ToJSON ChangeAnnotation where
   toJSON (ChangeAnnotation arg0 arg1 arg2) = Aeson.object $ concat $  [["label" Aeson..= arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ChangeAnnotationIdentifier.hs b/generated/Language/LSP/Protocol/Internal/Types/ChangeAnnotationIdentifier.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ChangeAnnotationIdentifier.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ChangeAnnotationIdentifier.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -23,3 +25,4 @@
   , Aeson.FromJSONKey )
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ChangeAnnotationIdentifier)
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
@@ -54,6 +56,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ClientCapabilities)
 
 instance Aeson.ToJSON ClientCapabilities where
   toJSON (ClientCapabilities arg0 arg1 arg2 arg3 arg4 arg5) = Aeson.object $ concat $  ["workspace" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
@@ -89,6 +91,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CodeAction)
 
 instance Aeson.ToJSON CodeAction where
   toJSON (CodeAction arg0 arg1 arg2 arg3 arg4 arg5 arg6 arg7) = Aeson.object $ concat $  [["title" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
 import qualified Data.Row.Aeson as Aeson
@@ -72,6 +74,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CodeActionClientCapabilities)
 
 instance Aeson.ToJSON CodeActionClientCapabilities where
   toJSON (CodeActionClientCapabilities arg0 arg1 arg2 arg3 arg4 arg5 arg6) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -45,6 +47,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CodeActionContext)
 
 instance Aeson.ToJSON CodeActionContext where
   toJSON (CodeActionContext arg0 arg1 arg2) = Aeson.object $ concat $  [["diagnostics" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -93,6 +95,7 @@
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON
   , Data.String.IsString ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum CodeActionKind Data.Text.Text)
+  deriving Pretty via (ViaJSON CodeActionKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum CodeActionKind where
   knownValues = Data.Set.fromList [CodeActionKind_Empty
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -39,6 +41,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CodeActionOptions)
 
 instance Aeson.ToJSON CodeActionOptions where
   toJSON (CodeActionOptions arg0 arg1 arg2) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -45,6 +47,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CodeActionParams)
 
 instance Aeson.ToJSON CodeActionParams where
   toJSON (CodeActionParams arg0 arg1 arg2 arg3 arg4) = Aeson.object $ concat $  ["workDoneToken" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -45,6 +47,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CodeActionRegistrationOptions)
 
 instance Aeson.ToJSON CodeActionRegistrationOptions where
   toJSON (CodeActionRegistrationOptions arg0 arg1 arg2 arg3) = Aeson.object $ concat $  [["documentSelector" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -37,6 +39,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum CodeActionTriggerKind Language.LSP.Protocol.Types.Common.UInt)
+  deriving Pretty via (ViaJSON CodeActionTriggerKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum CodeActionTriggerKind where
   knownValues = Data.Set.fromList [CodeActionTriggerKind_Invoked
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CodeDescription.hs b/generated/Language/LSP/Protocol/Internal/Types/CodeDescription.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CodeDescription.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CodeDescription.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -27,6 +29,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CodeDescription)
 
 instance Aeson.ToJSON CodeDescription where
   toJSON (CodeDescription arg0) = Aeson.object $ concat $  [["href" Aeson..= arg0]]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
@@ -40,6 +42,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CodeLens)
 
 instance Aeson.ToJSON CodeLens where
   toJSON (CodeLens arg0 arg1 arg2) = Aeson.object $ concat $  [["range" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -24,6 +26,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CodeLensClientCapabilities)
 
 instance Aeson.ToJSON CodeLensClientCapabilities where
   toJSON (CodeLensClientCapabilities arg0) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -28,6 +30,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CodeLensOptions)
 
 instance Aeson.ToJSON CodeLensOptions where
   toJSON (CodeLensOptions arg0 arg1) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -35,6 +37,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CodeLensParams)
 
 instance Aeson.ToJSON CodeLensParams where
   toJSON (CodeLensParams arg0 arg1 arg2) = Aeson.object $ concat $  ["workDoneToken" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -34,6 +36,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CodeLensRegistrationOptions)
 
 instance Aeson.ToJSON CodeLensRegistrationOptions where
   toJSON (CodeLensRegistrationOptions arg0 arg1 arg2) = Aeson.object $ concat $  [["documentSelector" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -30,6 +32,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CodeLensWorkspaceClientCapabilities)
 
 instance Aeson.ToJSON CodeLensWorkspaceClientCapabilities where
   toJSON (CodeLensWorkspaceClientCapabilities arg0) = Aeson.object $ concat $  ["refreshSupport" Language.LSP.Protocol.Types.Common..=? arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/Color.hs b/generated/Language/LSP/Protocol/Internal/Types/Color.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/Color.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/Color.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -36,6 +38,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON Color)
 
 instance Aeson.ToJSON Color where
   toJSON (Color arg0 arg1 arg2 arg3) = Aeson.object $ concat $  [["red" Aeson..= arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ColorInformation.hs b/generated/Language/LSP/Protocol/Internal/Types/ColorInformation.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ColorInformation.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ColorInformation.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -30,6 +32,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ColorInformation)
 
 instance Aeson.ToJSON ColorInformation where
   toJSON (ColorInformation arg0 arg1) = Aeson.object $ concat $  [["range" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -39,6 +41,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ColorPresentation)
 
 instance Aeson.ToJSON ColorPresentation where
   toJSON (ColorPresentation arg0 arg1 arg2) = Aeson.object $ concat $  [["label" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -45,6 +47,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ColorPresentationParams)
 
 instance Aeson.ToJSON ColorPresentationParams where
   toJSON (ColorPresentationParams arg0 arg1 arg2 arg3 arg4) = Aeson.object $ concat $  ["workDoneToken" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
@@ -38,6 +40,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON Command)
 
 instance Aeson.ToJSON Command where
   toJSON (Command arg0 arg1 arg2) = Aeson.object $ concat $  [["title" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
 import qualified Data.Row.Aeson as Aeson
@@ -59,6 +61,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CompletionClientCapabilities)
 
 instance Aeson.ToJSON CompletionClientCapabilities where
   toJSON (CompletionClientCapabilities arg0 arg1 arg2 arg3 arg4 arg5) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -31,6 +33,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CompletionContext)
 
 instance Aeson.ToJSON CompletionContext where
   toJSON (CompletionContext arg0 arg1) = Aeson.object $ concat $  [["triggerKind" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
@@ -187,6 +189,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CompletionItem)
 
 instance Aeson.ToJSON CompletionItem where
   toJSON (CompletionItem arg0 arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 arg11 arg12 arg13 arg14 arg15 arg16 arg17 arg18) = Aeson.object $ concat $  [["label" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -124,6 +126,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum CompletionItemKind Language.LSP.Protocol.Types.Common.UInt)
+  deriving Pretty via (ViaJSON CompletionItemKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum CompletionItemKind where
   knownValues = Data.Set.fromList [CompletionItemKind_Text
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -33,6 +35,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CompletionItemLabelDetails)
 
 instance Aeson.ToJSON CompletionItemLabelDetails where
   toJSON (CompletionItemLabelDetails arg0 arg1) = Aeson.object $ concat $  ["detail" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -31,6 +33,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum CompletionItemTag Language.LSP.Protocol.Types.Common.UInt)
+  deriving Pretty via (ViaJSON CompletionItemTag)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum CompletionItemTag where
   knownValues = Data.Set.fromList [CompletionItemTag_Deprecated]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
@@ -55,6 +57,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CompletionList)
 
 instance Aeson.ToJSON CompletionList where
   toJSON (CompletionList arg0 arg1 arg2) = Aeson.object $ concat $  [["isIncomplete" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
 import qualified Data.Row.Aeson as Aeson
@@ -60,6 +62,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CompletionOptions)
 
 instance Aeson.ToJSON CompletionOptions where
   toJSON (CompletionOptions arg0 arg1 arg2 arg3 arg4) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -46,6 +48,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CompletionParams)
 
 instance Aeson.ToJSON CompletionParams where
   toJSON (CompletionParams arg0 arg1 arg2 arg3 arg4) = Aeson.object $ concat $  [["textDocument" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
 import qualified Data.Row.Aeson as Aeson
@@ -66,6 +68,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CompletionRegistrationOptions)
 
 instance Aeson.ToJSON CompletionRegistrationOptions where
   toJSON (CompletionRegistrationOptions arg0 arg1 arg2 arg3 arg4 arg5) = Aeson.object $ concat $  [["documentSelector" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -38,6 +40,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum CompletionTriggerKind Language.LSP.Protocol.Types.Common.UInt)
+  deriving Pretty via (ViaJSON CompletionTriggerKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum CompletionTriggerKind where
   knownValues = Data.Set.fromList [CompletionTriggerKind_Invoked
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -29,6 +31,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ConfigurationItem)
 
 instance Aeson.ToJSON ConfigurationItem where
   toJSON (ConfigurationItem arg0 arg1) = Aeson.object $ concat $  ["scopeUri" Language.LSP.Protocol.Types.Common..=? arg0
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ConfigurationParams.hs b/generated/Language/LSP/Protocol/Internal/Types/ConfigurationParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ConfigurationParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ConfigurationParams.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -25,6 +27,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ConfigurationParams)
 
 instance Aeson.ToJSON ConfigurationParams where
   toJSON (ConfigurationParams arg0) = Aeson.object $ concat $  [["items" Aeson..= arg0]]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -42,6 +44,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CreateFile)
 
 instance Aeson.ToJSON CreateFile where
   toJSON (CreateFile arg0 arg1 arg2 arg3) = Aeson.object $ concat $  ["annotationId" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -28,6 +30,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CreateFileOptions)
 
 instance Aeson.ToJSON CreateFileOptions where
   toJSON (CreateFileOptions arg0 arg1) = Aeson.object $ concat $  ["overwrite" Language.LSP.Protocol.Types.Common..=? arg0
diff --git a/generated/Language/LSP/Protocol/Internal/Types/CreateFilesParams.hs b/generated/Language/LSP/Protocol/Internal/Types/CreateFilesParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/CreateFilesParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/CreateFilesParams.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -28,6 +30,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON CreateFilesParams)
 
 instance Aeson.ToJSON CreateFilesParams where
   toJSON (CreateFilesParams arg0) = Aeson.object $ concat $  [["files" Aeson..= arg0]]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/Declaration.hs b/generated/Language/LSP/Protocol/Internal/Types/Declaration.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/Declaration.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/Declaration.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -21,3 +23,4 @@
   deriving newtype (Aeson.ToJSON, Aeson.FromJSON)
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON Declaration)
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -30,6 +32,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DeclarationClientCapabilities)
 
 instance Aeson.ToJSON DeclarationClientCapabilities where
   toJSON (DeclarationClientCapabilities arg0 arg1) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DeclarationLink.hs b/generated/Language/LSP/Protocol/Internal/Types/DeclarationLink.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DeclarationLink.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DeclarationLink.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -26,3 +28,4 @@
   deriving newtype (Aeson.ToJSON, Aeson.FromJSON)
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DeclarationLink)
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -24,6 +26,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DeclarationOptions)
 
 instance Aeson.ToJSON DeclarationOptions where
   toJSON (DeclarationOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -40,6 +42,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DeclarationParams)
 
 instance Aeson.ToJSON DeclarationParams where
   toJSON (DeclarationParams arg0 arg1 arg2 arg3) = Aeson.object $ concat $  [["textDocument" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -36,6 +38,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DeclarationRegistrationOptions)
 
 instance Aeson.ToJSON DeclarationRegistrationOptions where
   toJSON (DeclarationRegistrationOptions arg0 arg1 arg2) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0
diff --git a/generated/Language/LSP/Protocol/Internal/Types/Definition.hs b/generated/Language/LSP/Protocol/Internal/Types/Definition.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/Definition.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/Definition.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -26,3 +28,4 @@
   deriving newtype (Aeson.ToJSON, Aeson.FromJSON)
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON Definition)
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -30,6 +32,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DefinitionClientCapabilities)
 
 instance Aeson.ToJSON DefinitionClientCapabilities where
   toJSON (DefinitionClientCapabilities arg0 arg1) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DefinitionLink.hs b/generated/Language/LSP/Protocol/Internal/Types/DefinitionLink.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DefinitionLink.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DefinitionLink.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -23,3 +25,4 @@
   deriving newtype (Aeson.ToJSON, Aeson.FromJSON)
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DefinitionLink)
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -24,6 +26,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DefinitionOptions)
 
 instance Aeson.ToJSON DefinitionOptions where
   toJSON (DefinitionOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -40,6 +42,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DefinitionParams)
 
 instance Aeson.ToJSON DefinitionParams where
   toJSON (DefinitionParams arg0 arg1 arg2 arg3) = Aeson.object $ concat $  [["textDocument" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -30,6 +32,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DefinitionRegistrationOptions)
 
 instance Aeson.ToJSON DefinitionRegistrationOptions where
   toJSON (DefinitionRegistrationOptions arg0 arg1) = Aeson.object $ concat $  [["documentSelector" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -42,6 +44,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DeleteFile)
 
 instance Aeson.ToJSON DeleteFile where
   toJSON (DeleteFile arg0 arg1 arg2 arg3) = Aeson.object $ concat $  ["annotationId" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -28,6 +30,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DeleteFileOptions)
 
 instance Aeson.ToJSON DeleteFileOptions where
   toJSON (DeleteFileOptions arg0 arg1) = Aeson.object $ concat $  ["recursive" Language.LSP.Protocol.Types.Common..=? arg0
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DeleteFilesParams.hs b/generated/Language/LSP/Protocol/Internal/Types/DeleteFilesParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DeleteFilesParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DeleteFilesParams.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -28,6 +30,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DeleteFilesParams)
 
 instance Aeson.ToJSON DeleteFilesParams where
   toJSON (DeleteFilesParams arg0) = Aeson.object $ concat $  [["files" Aeson..= arg0]]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
@@ -76,6 +78,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON Diagnostic)
 
 instance Aeson.ToJSON Diagnostic where
   toJSON (Diagnostic arg0 arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8) = Aeson.object $ concat $  [["range" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -32,6 +34,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DiagnosticClientCapabilities)
 
 instance Aeson.ToJSON DiagnosticClientCapabilities where
   toJSON (DiagnosticClientCapabilities arg0 arg1) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -43,6 +45,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DiagnosticOptions)
 
 instance Aeson.ToJSON DiagnosticOptions where
   toJSON (DiagnosticOptions arg0 arg1 arg2 arg3) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -54,6 +56,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DiagnosticRegistrationOptions)
 
 instance Aeson.ToJSON DiagnosticRegistrationOptions where
   toJSON (DiagnosticRegistrationOptions arg0 arg1 arg2 arg3 arg4 arg5) = Aeson.object $ concat $  [["documentSelector" Aeson..= arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DiagnosticRelatedInformation.hs b/generated/Language/LSP/Protocol/Internal/Types/DiagnosticRelatedInformation.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DiagnosticRelatedInformation.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DiagnosticRelatedInformation.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -32,6 +34,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DiagnosticRelatedInformation)
 
 instance Aeson.ToJSON DiagnosticRelatedInformation where
   toJSON (DiagnosticRelatedInformation arg0 arg1) = Aeson.object $ concat $  [["location" Aeson..= arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DiagnosticServerCancellationData.hs b/generated/Language/LSP/Protocol/Internal/Types/DiagnosticServerCancellationData.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DiagnosticServerCancellationData.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DiagnosticServerCancellationData.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -26,6 +28,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DiagnosticServerCancellationData)
 
 instance Aeson.ToJSON DiagnosticServerCancellationData where
   toJSON (DiagnosticServerCancellationData arg0) = Aeson.object $ concat $  [["retriggerRequest" Aeson..= arg0]]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -40,6 +42,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum DiagnosticSeverity Language.LSP.Protocol.Types.Common.UInt)
+  deriving Pretty via (ViaJSON DiagnosticSeverity)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum DiagnosticSeverity where
   knownValues = Data.Set.fromList [DiagnosticSeverity_Error
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -39,6 +41,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum DiagnosticTag Language.LSP.Protocol.Types.Common.UInt)
+  deriving Pretty via (ViaJSON DiagnosticTag)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum DiagnosticTag where
   knownValues = Data.Set.fromList [DiagnosticTag_Unnecessary
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -32,6 +34,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DiagnosticWorkspaceClientCapabilities)
 
 instance Aeson.ToJSON DiagnosticWorkspaceClientCapabilities where
   toJSON (DiagnosticWorkspaceClientCapabilities arg0) = Aeson.object $ concat $  ["refreshSupport" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -24,6 +26,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DidChangeConfigurationClientCapabilities)
 
 instance Aeson.ToJSON DidChangeConfigurationClientCapabilities where
   toJSON (DidChangeConfigurationClientCapabilities arg0) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DidChangeConfigurationParams.hs b/generated/Language/LSP/Protocol/Internal/Types/DidChangeConfigurationParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DidChangeConfigurationParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DidChangeConfigurationParams.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
@@ -25,6 +27,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DidChangeConfigurationParams)
 
 instance Aeson.ToJSON DidChangeConfigurationParams where
   toJSON (DidChangeConfigurationParams arg0) = Aeson.object $ concat $  [["settings" Aeson..= arg0]]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -25,6 +27,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DidChangeConfigurationRegistrationOptions)
 
 instance Aeson.ToJSON DidChangeConfigurationRegistrationOptions where
   toJSON (DidChangeConfigurationRegistrationOptions arg0) = Aeson.object $ concat $  ["section" Language.LSP.Protocol.Types.Common..=? arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DidChangeNotebookDocumentParams.hs b/generated/Language/LSP/Protocol/Internal/Types/DidChangeNotebookDocumentParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DidChangeNotebookDocumentParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DidChangeNotebookDocumentParams.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -47,6 +49,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DidChangeNotebookDocumentParams)
 
 instance Aeson.ToJSON DidChangeNotebookDocumentParams where
   toJSON (DidChangeNotebookDocumentParams arg0 arg1) = Aeson.object $ concat $  [["notebookDocument" Aeson..= arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DidChangeTextDocumentParams.hs b/generated/Language/LSP/Protocol/Internal/Types/DidChangeTextDocumentParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DidChangeTextDocumentParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DidChangeTextDocumentParams.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -42,6 +44,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DidChangeTextDocumentParams)
 
 instance Aeson.ToJSON DidChangeTextDocumentParams where
   toJSON (DidChangeTextDocumentParams arg0 arg1) = Aeson.object $ concat $  [["textDocument" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -33,6 +35,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DidChangeWatchedFilesClientCapabilities)
 
 instance Aeson.ToJSON DidChangeWatchedFilesClientCapabilities where
   toJSON (DidChangeWatchedFilesClientCapabilities arg0 arg1) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DidChangeWatchedFilesParams.hs b/generated/Language/LSP/Protocol/Internal/Types/DidChangeWatchedFilesParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DidChangeWatchedFilesParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DidChangeWatchedFilesParams.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -25,6 +27,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DidChangeWatchedFilesParams)
 
 instance Aeson.ToJSON DidChangeWatchedFilesParams where
   toJSON (DidChangeWatchedFilesParams arg0) = Aeson.object $ concat $  [["changes" Aeson..= arg0]]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DidChangeWatchedFilesRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/DidChangeWatchedFilesRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DidChangeWatchedFilesRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DidChangeWatchedFilesRegistrationOptions.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -25,6 +27,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DidChangeWatchedFilesRegistrationOptions)
 
 instance Aeson.ToJSON DidChangeWatchedFilesRegistrationOptions where
   toJSON (DidChangeWatchedFilesRegistrationOptions arg0) = Aeson.object $ concat $  [["watchers" Aeson..= arg0]]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DidChangeWorkspaceFoldersParams.hs b/generated/Language/LSP/Protocol/Internal/Types/DidChangeWorkspaceFoldersParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DidChangeWorkspaceFoldersParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DidChangeWorkspaceFoldersParams.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -25,6 +27,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DidChangeWorkspaceFoldersParams)
 
 instance Aeson.ToJSON DidChangeWorkspaceFoldersParams where
   toJSON (DidChangeWorkspaceFoldersParams arg0) = Aeson.object $ concat $  [["event" Aeson..= arg0]]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DidCloseNotebookDocumentParams.hs b/generated/Language/LSP/Protocol/Internal/Types/DidCloseNotebookDocumentParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DidCloseNotebookDocumentParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DidCloseNotebookDocumentParams.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -33,6 +35,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DidCloseNotebookDocumentParams)
 
 instance Aeson.ToJSON DidCloseNotebookDocumentParams where
   toJSON (DidCloseNotebookDocumentParams arg0 arg1) = Aeson.object $ concat $  [["notebookDocument" Aeson..= arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DidCloseTextDocumentParams.hs b/generated/Language/LSP/Protocol/Internal/Types/DidCloseTextDocumentParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DidCloseTextDocumentParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DidCloseTextDocumentParams.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -25,6 +27,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DidCloseTextDocumentParams)
 
 instance Aeson.ToJSON DidCloseTextDocumentParams where
   toJSON (DidCloseTextDocumentParams arg0) = Aeson.object $ concat $  [["textDocument" Aeson..= arg0]]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DidOpenNotebookDocumentParams.hs b/generated/Language/LSP/Protocol/Internal/Types/DidOpenNotebookDocumentParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DidOpenNotebookDocumentParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DidOpenNotebookDocumentParams.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -33,6 +35,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DidOpenNotebookDocumentParams)
 
 instance Aeson.ToJSON DidOpenNotebookDocumentParams where
   toJSON (DidOpenNotebookDocumentParams arg0 arg1) = Aeson.object $ concat $  [["notebookDocument" Aeson..= arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DidOpenTextDocumentParams.hs b/generated/Language/LSP/Protocol/Internal/Types/DidOpenTextDocumentParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DidOpenTextDocumentParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DidOpenTextDocumentParams.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -25,6 +27,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DidOpenTextDocumentParams)
 
 instance Aeson.ToJSON DidOpenTextDocumentParams where
   toJSON (DidOpenTextDocumentParams arg0) = Aeson.object $ concat $  [["textDocument" Aeson..= arg0]]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DidSaveNotebookDocumentParams.hs b/generated/Language/LSP/Protocol/Internal/Types/DidSaveNotebookDocumentParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DidSaveNotebookDocumentParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DidSaveNotebookDocumentParams.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -27,6 +29,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DidSaveNotebookDocumentParams)
 
 instance Aeson.ToJSON DidSaveNotebookDocumentParams where
   toJSON (DidSaveNotebookDocumentParams arg0) = Aeson.object $ concat $  [["notebookDocument" Aeson..= arg0]]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -31,6 +33,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DidSaveTextDocumentParams)
 
 instance Aeson.ToJSON DidSaveTextDocumentParams where
   toJSON (DidSaveTextDocumentParams arg0 arg1) = Aeson.object $ concat $  [["textDocument" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -26,6 +28,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentColorClientCapabilities)
 
 instance Aeson.ToJSON DocumentColorClientCapabilities where
   toJSON (DocumentColorClientCapabilities arg0) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -24,6 +26,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentColorOptions)
 
 instance Aeson.ToJSON DocumentColorOptions where
   toJSON (DocumentColorOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -35,6 +37,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentColorParams)
 
 instance Aeson.ToJSON DocumentColorParams where
   toJSON (DocumentColorParams arg0 arg1 arg2) = Aeson.object $ concat $  ["workDoneToken" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -36,6 +38,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentColorRegistrationOptions)
 
 instance Aeson.ToJSON DocumentColorRegistrationOptions where
   toJSON (DocumentColorRegistrationOptions arg0 arg1 arg2) = Aeson.object $ concat $  [["documentSelector" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -46,6 +48,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentDiagnosticParams)
 
 instance Aeson.ToJSON DocumentDiagnosticParams where
   toJSON (DocumentDiagnosticParams arg0 arg1 arg2 arg3 arg4) = Aeson.object $ concat $  ["workDoneToken" Language.LSP.Protocol.Types.Common..=? arg0
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentDiagnosticReport.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentDiagnosticReport.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentDiagnosticReport.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentDiagnosticReport.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -28,3 +30,4 @@
   deriving newtype (Aeson.ToJSON, Aeson.FromJSON)
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentDiagnosticReport)
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -36,6 +38,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum DocumentDiagnosticReportKind Data.Text.Text)
+  deriving Pretty via (ViaJSON DocumentDiagnosticReportKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum DocumentDiagnosticReportKind where
   knownValues = Data.Set.fromList [DocumentDiagnosticReportKind_Full
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentDiagnosticReportPartialResult.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentDiagnosticReportPartialResult.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentDiagnosticReportPartialResult.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentDiagnosticReportPartialResult.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Map
 import qualified Data.Row.Aeson as Aeson
@@ -30,6 +32,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentDiagnosticReportPartialResult)
 
 instance Aeson.ToJSON DocumentDiagnosticReportPartialResult where
   toJSON (DocumentDiagnosticReportPartialResult arg0) = Aeson.object $ concat $  [["relatedDocuments" Aeson..= arg0]]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentFilter.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentFilter.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentFilter.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentFilter.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -25,3 +27,4 @@
   deriving newtype (Aeson.ToJSON, Aeson.FromJSON)
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentFilter)
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -24,6 +26,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentFormattingClientCapabilities)
 
 instance Aeson.ToJSON DocumentFormattingClientCapabilities where
   toJSON (DocumentFormattingClientCapabilities arg0) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -24,6 +26,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentFormattingOptions)
 
 instance Aeson.ToJSON DocumentFormattingOptions where
   toJSON (DocumentFormattingOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -35,6 +37,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentFormattingParams)
 
 instance Aeson.ToJSON DocumentFormattingParams where
   toJSON (DocumentFormattingParams arg0 arg1 arg2) = Aeson.object $ concat $  ["workDoneToken" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -30,6 +32,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentFormattingRegistrationOptions)
 
 instance Aeson.ToJSON DocumentFormattingRegistrationOptions where
   toJSON (DocumentFormattingRegistrationOptions arg0 arg1) = Aeson.object $ concat $  [["documentSelector" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -32,6 +34,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentHighlight)
 
 instance Aeson.ToJSON DocumentHighlight where
   toJSON (DocumentHighlight arg0 arg1) = Aeson.object $ concat $  [["range" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -24,6 +26,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentHighlightClientCapabilities)
 
 instance Aeson.ToJSON DocumentHighlightClientCapabilities where
   toJSON (DocumentHighlightClientCapabilities arg0) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -36,6 +38,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum DocumentHighlightKind Language.LSP.Protocol.Types.Common.UInt)
+  deriving Pretty via (ViaJSON DocumentHighlightKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum DocumentHighlightKind where
   knownValues = Data.Set.fromList [DocumentHighlightKind_Text
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -24,6 +26,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentHighlightOptions)
 
 instance Aeson.ToJSON DocumentHighlightOptions where
   toJSON (DocumentHighlightOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -40,6 +42,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentHighlightParams)
 
 instance Aeson.ToJSON DocumentHighlightParams where
   toJSON (DocumentHighlightParams arg0 arg1 arg2 arg3) = Aeson.object $ concat $  [["textDocument" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -30,6 +32,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentHighlightRegistrationOptions)
 
 instance Aeson.ToJSON DocumentHighlightRegistrationOptions where
   toJSON (DocumentHighlightRegistrationOptions arg0 arg1) = Aeson.object $ concat $  [["documentSelector" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
@@ -47,6 +49,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentLink)
 
 instance Aeson.ToJSON DocumentLink where
   toJSON (DocumentLink arg0 arg1 arg2 arg3) = Aeson.object $ concat $  [["range" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -30,6 +32,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentLinkClientCapabilities)
 
 instance Aeson.ToJSON DocumentLinkClientCapabilities where
   toJSON (DocumentLinkClientCapabilities arg0 arg1) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -28,6 +30,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentLinkOptions)
 
 instance Aeson.ToJSON DocumentLinkOptions where
   toJSON (DocumentLinkOptions arg0 arg1) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -35,6 +37,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentLinkParams)
 
 instance Aeson.ToJSON DocumentLinkParams where
   toJSON (DocumentLinkParams arg0 arg1 arg2) = Aeson.object $ concat $  ["workDoneToken" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -34,6 +36,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentLinkRegistrationOptions)
 
 instance Aeson.ToJSON DocumentLinkRegistrationOptions where
   toJSON (DocumentLinkRegistrationOptions arg0 arg1 arg2) = Aeson.object $ concat $  [["documentSelector" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -24,6 +26,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentOnTypeFormattingClientCapabilities)
 
 instance Aeson.ToJSON DocumentOnTypeFormattingClientCapabilities where
   toJSON (DocumentOnTypeFormattingClientCapabilities arg0) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -29,6 +31,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentOnTypeFormattingOptions)
 
 instance Aeson.ToJSON DocumentOnTypeFormattingOptions where
   toJSON (DocumentOnTypeFormattingOptions arg0 arg1) = Aeson.object $ concat $  [["firstTriggerCharacter" Aeson..= arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentOnTypeFormattingParams.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentOnTypeFormattingParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentOnTypeFormattingParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentOnTypeFormattingParams.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -45,6 +47,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentOnTypeFormattingParams)
 
 instance Aeson.ToJSON DocumentOnTypeFormattingParams where
   toJSON (DocumentOnTypeFormattingParams arg0 arg1 arg2 arg3) = Aeson.object $ concat $  [["textDocument" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -35,6 +37,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentOnTypeFormattingRegistrationOptions)
 
 instance Aeson.ToJSON DocumentOnTypeFormattingRegistrationOptions where
   toJSON (DocumentOnTypeFormattingRegistrationOptions arg0 arg1 arg2) = Aeson.object $ concat $  [["documentSelector" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -24,6 +26,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentRangeFormattingClientCapabilities)
 
 instance Aeson.ToJSON DocumentRangeFormattingClientCapabilities where
   toJSON (DocumentRangeFormattingClientCapabilities arg0) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -24,6 +26,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentRangeFormattingOptions)
 
 instance Aeson.ToJSON DocumentRangeFormattingOptions where
   toJSON (DocumentRangeFormattingOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -40,6 +42,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentRangeFormattingParams)
 
 instance Aeson.ToJSON DocumentRangeFormattingParams where
   toJSON (DocumentRangeFormattingParams arg0 arg1 arg2 arg3) = Aeson.object $ concat $  ["workDoneToken" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -30,6 +32,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentRangeFormattingRegistrationOptions)
 
 instance Aeson.ToJSON DocumentRangeFormattingRegistrationOptions where
   toJSON (DocumentRangeFormattingRegistrationOptions arg0 arg1) = Aeson.object $ concat $  [["documentSelector" Aeson..= arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/DocumentSelector.hs b/generated/Language/LSP/Protocol/Internal/Types/DocumentSelector.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/DocumentSelector.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/DocumentSelector.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -24,3 +26,4 @@
   deriving newtype (Aeson.ToJSON, Aeson.FromJSON)
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentSelector)
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -67,6 +69,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentSymbol)
 
 instance Aeson.ToJSON DocumentSymbol where
   toJSON (DocumentSymbol arg0 arg1 arg2 arg3 arg4 arg5 arg6 arg7) = Aeson.object $ concat $  [["name" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
 import qualified Data.Row.Aeson as Aeson
@@ -51,6 +53,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentSymbolClientCapabilities)
 
 instance Aeson.ToJSON DocumentSymbolClientCapabilities where
   toJSON (DocumentSymbolClientCapabilities arg0 arg1 arg2 arg3 arg4) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -32,6 +34,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentSymbolOptions)
 
 instance Aeson.ToJSON DocumentSymbolOptions where
   toJSON (DocumentSymbolOptions arg0 arg1) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -35,6 +37,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentSymbolParams)
 
 instance Aeson.ToJSON DocumentSymbolParams where
   toJSON (DocumentSymbolParams arg0 arg1 arg2) = Aeson.object $ concat $  ["workDoneToken" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -38,6 +40,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON DocumentSymbolRegistrationOptions)
 
 instance Aeson.ToJSON DocumentSymbolRegistrationOptions where
   toJSON (DocumentSymbolRegistrationOptions arg0 arg1 arg2) = Aeson.object $ concat $  [["documentSelector" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -54,6 +56,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum ErrorCodes Language.LSP.Protocol.Types.Common.Int32)
+  deriving Pretty via (ViaJSON ErrorCodes)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum ErrorCodes where
   knownValues = Data.Set.fromList [ErrorCodes_ParseError
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -24,6 +26,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ExecuteCommandClientCapabilities)
 
 instance Aeson.ToJSON ExecuteCommandClientCapabilities where
   toJSON (ExecuteCommandClientCapabilities arg0) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -29,6 +31,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ExecuteCommandOptions)
 
 instance Aeson.ToJSON ExecuteCommandOptions where
   toJSON (ExecuteCommandOptions arg0 arg1) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
@@ -35,6 +37,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ExecuteCommandParams)
 
 instance Aeson.ToJSON ExecuteCommandParams where
   toJSON (ExecuteCommandParams arg0 arg1 arg2) = Aeson.object $ concat $  ["workDoneToken" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -29,6 +31,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ExecuteCommandRegistrationOptions)
 
 instance Aeson.ToJSON ExecuteCommandRegistrationOptions where
   toJSON (ExecuteCommandRegistrationOptions arg0 arg1) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -31,6 +33,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ExecutionSummary)
 
 instance Aeson.ToJSON ExecutionSummary where
   toJSON (ExecutionSummary arg0 arg1) = Aeson.object $ concat $  [["executionOrder" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -45,6 +47,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum FailureHandlingKind Data.Text.Text)
+  deriving Pretty via (ViaJSON FailureHandlingKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum FailureHandlingKind where
   knownValues = Data.Set.fromList [FailureHandlingKind_Abort
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -36,6 +38,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum FileChangeType Language.LSP.Protocol.Types.Common.UInt)
+  deriving Pretty via (ViaJSON FileChangeType)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum FileChangeType where
   knownValues = Data.Set.fromList [FileChangeType_Created
diff --git a/generated/Language/LSP/Protocol/Internal/Types/FileCreate.hs b/generated/Language/LSP/Protocol/Internal/Types/FileCreate.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/FileCreate.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/FileCreate.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -27,6 +29,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON FileCreate)
 
 instance Aeson.ToJSON FileCreate where
   toJSON (FileCreate arg0) = Aeson.object $ concat $  [["uri" Aeson..= arg0]]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/FileDelete.hs b/generated/Language/LSP/Protocol/Internal/Types/FileDelete.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/FileDelete.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/FileDelete.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -27,6 +29,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON FileDelete)
 
 instance Aeson.ToJSON FileDelete where
   toJSON (FileDelete arg0) = Aeson.object $ concat $  [["uri" Aeson..= arg0]]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/FileEvent.hs b/generated/Language/LSP/Protocol/Internal/Types/FileEvent.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/FileEvent.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/FileEvent.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -30,6 +32,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON FileEvent)
 
 instance Aeson.ToJSON FileEvent where
   toJSON (FileEvent arg0 arg1) = Aeson.object $ concat $  [["uri" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -53,6 +55,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON FileOperationClientCapabilities)
 
 instance Aeson.ToJSON FileOperationClientCapabilities where
   toJSON (FileOperationClientCapabilities arg0 arg1 arg2 arg3 arg4 arg5 arg6) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -33,6 +35,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON FileOperationFilter)
 
 instance Aeson.ToJSON FileOperationFilter where
   toJSON (FileOperationFilter arg0 arg1) = Aeson.object $ concat $  ["scheme" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -47,6 +49,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON FileOperationOptions)
 
 instance Aeson.ToJSON FileOperationOptions where
   toJSON (FileOperationOptions arg0 arg1 arg2 arg3 arg4 arg5) = Aeson.object $ concat $  ["didCreate" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -46,6 +48,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON FileOperationPattern)
 
 instance Aeson.ToJSON FileOperationPattern where
   toJSON (FileOperationPattern arg0 arg1 arg2) = Aeson.object $ concat $  [["glob" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -35,6 +37,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum FileOperationPatternKind Data.Text.Text)
+  deriving Pretty via (ViaJSON FileOperationPatternKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum FileOperationPatternKind where
   knownValues = Data.Set.fromList [FileOperationPatternKind_File
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -26,6 +28,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON FileOperationPatternOptions)
 
 instance Aeson.ToJSON FileOperationPatternOptions where
   toJSON (FileOperationPatternOptions arg0) = Aeson.object $ concat $  ["ignoreCase" Language.LSP.Protocol.Types.Common..=? arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/FileOperationRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/FileOperationRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/FileOperationRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/FileOperationRegistrationOptions.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -27,6 +29,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON FileOperationRegistrationOptions)
 
 instance Aeson.ToJSON FileOperationRegistrationOptions where
   toJSON (FileOperationRegistrationOptions arg0) = Aeson.object $ concat $  [["filters" Aeson..= arg0]]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/FileRename.hs b/generated/Language/LSP/Protocol/Internal/Types/FileRename.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/FileRename.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/FileRename.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -31,6 +33,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON FileRename)
 
 instance Aeson.ToJSON FileRename where
   toJSON (FileRename arg0 arg1) = Aeson.object $ concat $  [["oldUri" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -34,6 +36,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON FileSystemWatcher)
 
 instance Aeson.ToJSON FileSystemWatcher where
   toJSON (FileSystemWatcher arg0 arg1) = Aeson.object $ concat $  [["globPattern" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -55,6 +57,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON FoldingRange)
 
 instance Aeson.ToJSON FoldingRange where
   toJSON (FoldingRange arg0 arg1 arg2 arg3 arg4 arg5) = Aeson.object $ concat $  [["startLine" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
 import qualified Data.Row.Aeson as Aeson
@@ -53,6 +55,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON FoldingRangeClientCapabilities)
 
 instance Aeson.ToJSON FoldingRangeClientCapabilities where
   toJSON (FoldingRangeClientCapabilities arg0 arg1 arg2 arg3 arg4) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -38,6 +40,7 @@
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON
   , Data.String.IsString ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum FoldingRangeKind Data.Text.Text)
+  deriving Pretty via (ViaJSON FoldingRangeKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum FoldingRangeKind where
   knownValues = Data.Set.fromList [FoldingRangeKind_Comment
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -24,6 +26,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON FoldingRangeOptions)
 
 instance Aeson.ToJSON FoldingRangeOptions where
   toJSON (FoldingRangeOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -35,6 +37,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON FoldingRangeParams)
 
 instance Aeson.ToJSON FoldingRangeParams where
   toJSON (FoldingRangeParams arg0 arg1 arg2) = Aeson.object $ concat $  ["workDoneToken" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -36,6 +38,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON FoldingRangeRegistrationOptions)
 
 instance Aeson.ToJSON FoldingRangeRegistrationOptions where
   toJSON (FoldingRangeRegistrationOptions arg0 arg1 arg2) = Aeson.object $ concat $  [["documentSelector" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -46,6 +48,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON FormattingOptions)
 
 instance Aeson.ToJSON FormattingOptions where
   toJSON (FormattingOptions arg0 arg1 arg2 arg3 arg4) = Aeson.object $ concat $  [["tabSize" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -39,6 +41,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON FullDocumentDiagnosticReport)
 
 instance Aeson.ToJSON FullDocumentDiagnosticReport where
   toJSON (FullDocumentDiagnosticReport arg0 arg1 arg2) = Aeson.object $ concat $  [["kind" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
 import qualified Data.Row.Aeson as Aeson
@@ -69,6 +71,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON GeneralClientCapabilities)
 
 instance Aeson.ToJSON GeneralClientCapabilities where
   toJSON (GeneralClientCapabilities arg0 arg1 arg2 arg3) = Aeson.object $ concat $  ["staleRequestSupport" Language.LSP.Protocol.Types.Common..=? arg0
diff --git a/generated/Language/LSP/Protocol/Internal/Types/GlobPattern.hs b/generated/Language/LSP/Protocol/Internal/Types/GlobPattern.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/GlobPattern.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/GlobPattern.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -24,3 +26,4 @@
   deriving newtype (Aeson.ToJSON, Aeson.FromJSON)
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON GlobPattern)
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -32,6 +34,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON Hover)
 
 instance Aeson.ToJSON Hover where
   toJSON (Hover arg0 arg1) = Aeson.object $ concat $  [["contents" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -30,6 +32,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON HoverClientCapabilities)
 
 instance Aeson.ToJSON HoverClientCapabilities where
   toJSON (HoverClientCapabilities arg0 arg1) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -24,6 +26,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON HoverOptions)
 
 instance Aeson.ToJSON HoverOptions where
   toJSON (HoverOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -35,6 +37,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON HoverParams)
 
 instance Aeson.ToJSON HoverParams where
   toJSON (HoverParams arg0 arg1 arg2) = Aeson.object $ concat $  [["textDocument" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -30,6 +32,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON HoverRegistrationOptions)
 
 instance Aeson.ToJSON HoverRegistrationOptions where
   toJSON (HoverRegistrationOptions arg0 arg1) = Aeson.object $ concat $  [["documentSelector" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -32,6 +34,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ImplementationClientCapabilities)
 
 instance Aeson.ToJSON ImplementationClientCapabilities where
   toJSON (ImplementationClientCapabilities arg0 arg1) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -24,6 +26,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ImplementationOptions)
 
 instance Aeson.ToJSON ImplementationOptions where
   toJSON (ImplementationOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -40,6 +42,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ImplementationParams)
 
 instance Aeson.ToJSON ImplementationParams where
   toJSON (ImplementationParams arg0 arg1 arg2 arg3) = Aeson.object $ concat $  [["textDocument" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -36,6 +38,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ImplementationRegistrationOptions)
 
 instance Aeson.ToJSON ImplementationRegistrationOptions where
   toJSON (ImplementationRegistrationOptions arg0 arg1 arg2) = Aeson.object $ concat $  [["documentSelector" Aeson..= arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/InitializeError.hs b/generated/Language/LSP/Protocol/Internal/Types/InitializeError.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/InitializeError.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/InitializeError.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -28,6 +30,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON InitializeError)
 
 instance Aeson.ToJSON InitializeError where
   toJSON (InitializeError arg0) = Aeson.object $ concat $  [["retry" Aeson..= arg0]]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
@@ -94,6 +96,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON InitializeParams)
 
 instance Aeson.ToJSON InitializeParams where
   toJSON (InitializeParams arg0 arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9) = Aeson.object $ concat $  ["workDoneToken" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
 import qualified Data.Row.Aeson as Aeson
@@ -33,6 +35,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON InitializeResult)
 
 instance Aeson.ToJSON InitializeResult where
   toJSON (InitializeResult arg0 arg1) = Aeson.object $ concat $  [["capabilities" Aeson..= arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/InitializedParams.hs b/generated/Language/LSP/Protocol/Internal/Types/InitializedParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/InitializedParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/InitializedParams.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -21,6 +23,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON InitializedParams)
 
 instance Aeson.ToJSON InitializedParams where
   toJSON (InitializedParams ) = Aeson.object $ concat $  []
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
@@ -78,6 +80,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON InlayHint)
 
 instance Aeson.ToJSON InlayHint where
   toJSON (InlayHint arg0 arg1 arg2 arg3 arg4 arg5 arg6 arg7) = Aeson.object $ concat $  [["position" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
 import qualified Data.Row.Aeson as Aeson
@@ -33,6 +35,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON InlayHintClientCapabilities)
 
 instance Aeson.ToJSON InlayHintClientCapabilities where
   toJSON (InlayHintClientCapabilities arg0 arg1) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -34,6 +36,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum InlayHintKind Language.LSP.Protocol.Types.Common.UInt)
+  deriving Pretty via (ViaJSON InlayHintKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum InlayHintKind where
   knownValues = Data.Set.fromList [InlayHintKind_Type,InlayHintKind_Parameter]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -58,6 +60,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON InlayHintLabelPart)
 
 instance Aeson.ToJSON InlayHintLabelPart where
   toJSON (InlayHintLabelPart arg0 arg1 arg2 arg3) = Aeson.object $ concat $  [["value" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -31,6 +33,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON InlayHintOptions)
 
 instance Aeson.ToJSON InlayHintOptions where
   toJSON (InlayHintOptions arg0 arg1) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -37,6 +39,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON InlayHintParams)
 
 instance Aeson.ToJSON InlayHintParams where
   toJSON (InlayHintParams arg0 arg1 arg2) = Aeson.object $ concat $  ["workDoneToken" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -43,6 +45,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON InlayHintRegistrationOptions)
 
 instance Aeson.ToJSON InlayHintRegistrationOptions where
   toJSON (InlayHintRegistrationOptions arg0 arg1 arg2 arg3) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -32,6 +34,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON InlayHintWorkspaceClientCapabilities)
 
 instance Aeson.ToJSON InlayHintWorkspaceClientCapabilities where
   toJSON (InlayHintWorkspaceClientCapabilities arg0) = Aeson.object $ concat $  ["refreshSupport" Language.LSP.Protocol.Types.Common..=? arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/InlineValue.hs b/generated/Language/LSP/Protocol/Internal/Types/InlineValue.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/InlineValue.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/InlineValue.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -29,3 +31,4 @@
   deriving newtype (Aeson.ToJSON, Aeson.FromJSON)
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON InlineValue)
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -26,6 +28,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON InlineValueClientCapabilities)
 
 instance Aeson.ToJSON InlineValueClientCapabilities where
   toJSON (InlineValueClientCapabilities arg0) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/InlineValueContext.hs b/generated/Language/LSP/Protocol/Internal/Types/InlineValueContext.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/InlineValueContext.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/InlineValueContext.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -30,6 +32,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON InlineValueContext)
 
 instance Aeson.ToJSON InlineValueContext where
   toJSON (InlineValueContext arg0 arg1) = Aeson.object $ concat $  [["frameId" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -35,6 +37,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON InlineValueEvaluatableExpression)
 
 instance Aeson.ToJSON InlineValueEvaluatableExpression where
   toJSON (InlineValueEvaluatableExpression arg0 arg1) = Aeson.object $ concat $  [["range" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -26,6 +28,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON InlineValueOptions)
 
 instance Aeson.ToJSON InlineValueOptions where
   toJSON (InlineValueOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -43,6 +45,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON InlineValueParams)
 
 instance Aeson.ToJSON InlineValueParams where
   toJSON (InlineValueParams arg0 arg1 arg2 arg3) = Aeson.object $ concat $  ["workDoneToken" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -38,6 +40,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON InlineValueRegistrationOptions)
 
 instance Aeson.ToJSON InlineValueRegistrationOptions where
   toJSON (InlineValueRegistrationOptions arg0 arg1 arg2) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0
diff --git a/generated/Language/LSP/Protocol/Internal/Types/InlineValueText.hs b/generated/Language/LSP/Protocol/Internal/Types/InlineValueText.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/InlineValueText.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/InlineValueText.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -32,6 +34,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON InlineValueText)
 
 instance Aeson.ToJSON InlineValueText where
   toJSON (InlineValueText arg0 arg1) = Aeson.object $ concat $  [["range" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -39,6 +41,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON InlineValueVariableLookup)
 
 instance Aeson.ToJSON InlineValueVariableLookup where
   toJSON (InlineValueVariableLookup arg0 arg1 arg2) = Aeson.object $ concat $  [["range" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -32,6 +34,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON InlineValueWorkspaceClientCapabilities)
 
 instance Aeson.ToJSON InlineValueWorkspaceClientCapabilities where
   toJSON (InlineValueWorkspaceClientCapabilities arg0) = Aeson.object $ concat $  ["refreshSupport" Language.LSP.Protocol.Types.Common..=? arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/InsertReplaceEdit.hs b/generated/Language/LSP/Protocol/Internal/Types/InsertReplaceEdit.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/InsertReplaceEdit.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/InsertReplaceEdit.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -36,6 +38,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON InsertReplaceEdit)
 
 instance Aeson.ToJSON InsertReplaceEdit where
   toJSON (InsertReplaceEdit arg0 arg1 arg2) = Aeson.object $ concat $  [["newText" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -40,6 +42,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum InsertTextFormat Language.LSP.Protocol.Types.Common.UInt)
+  deriving Pretty via (ViaJSON InsertTextFormat)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum InsertTextFormat where
   knownValues = Data.Set.fromList [InsertTextFormat_PlainText
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -45,6 +47,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum InsertTextMode Language.LSP.Protocol.Types.Common.UInt)
+  deriving Pretty via (ViaJSON InsertTextMode)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum InsertTextMode where
   knownValues = Data.Set.fromList [InsertTextMode_AsIs
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -58,6 +60,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum LSPErrorCodes Language.LSP.Protocol.Types.Common.Int32)
+  deriving Pretty via (ViaJSON LSPErrorCodes)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum LSPErrorCodes where
   knownValues = Data.Set.fromList [LSPErrorCodes_RequestFailed
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -28,6 +30,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON LinkedEditingRangeClientCapabilities)
 
 instance Aeson.ToJSON LinkedEditingRangeClientCapabilities where
   toJSON (LinkedEditingRangeClientCapabilities arg0) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -24,6 +26,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON LinkedEditingRangeOptions)
 
 instance Aeson.ToJSON LinkedEditingRangeOptions where
   toJSON (LinkedEditingRangeOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -35,6 +37,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON LinkedEditingRangeParams)
 
 instance Aeson.ToJSON LinkedEditingRangeParams where
   toJSON (LinkedEditingRangeParams arg0 arg1 arg2) = Aeson.object $ concat $  [["textDocument" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -36,6 +38,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON LinkedEditingRangeRegistrationOptions)
 
 instance Aeson.ToJSON LinkedEditingRangeRegistrationOptions where
   toJSON (LinkedEditingRangeRegistrationOptions arg0 arg1 arg2) = Aeson.object $ concat $  [["documentSelector" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -35,6 +37,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON LinkedEditingRanges)
 
 instance Aeson.ToJSON LinkedEditingRanges where
   toJSON (LinkedEditingRanges arg0 arg1) = Aeson.object $ concat $  [["ranges" Aeson..= arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/Location.hs b/generated/Language/LSP/Protocol/Internal/Types/Location.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/Location.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/Location.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -31,6 +33,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON Location)
 
 instance Aeson.ToJSON Location where
   toJSON (Location arg0 arg1) = Aeson.object $ concat $  [["uri" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -45,6 +47,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON LocationLink)
 
 instance Aeson.ToJSON LocationLink where
   toJSON (LocationLink arg0 arg1 arg2 arg3) = Aeson.object $ concat $  ["originSelectionRange" Language.LSP.Protocol.Types.Common..=? arg0
diff --git a/generated/Language/LSP/Protocol/Internal/Types/LogMessageParams.hs b/generated/Language/LSP/Protocol/Internal/Types/LogMessageParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/LogMessageParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/LogMessageParams.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -30,6 +32,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON LogMessageParams)
 
 instance Aeson.ToJSON LogMessageParams where
   toJSON (LogMessageParams arg0 arg1) = Aeson.object $ concat $  [["type" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -29,6 +31,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON LogTraceParams)
 
 instance Aeson.ToJSON LogTraceParams where
   toJSON (LogTraceParams arg0 arg1) = Aeson.object $ concat $  [["message" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -38,6 +40,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON MarkdownClientCapabilities)
 
 instance Aeson.ToJSON MarkdownClientCapabilities where
   toJSON (MarkdownClientCapabilities arg0 arg1 arg2) = Aeson.object $ concat $  [["parser" Aeson..= arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/MarkedString.hs b/generated/Language/LSP/Protocol/Internal/Types/MarkedString.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/MarkedString.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/MarkedString.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
 import qualified Data.Row.Aeson as Aeson
@@ -34,3 +36,4 @@
   deriving newtype (Aeson.ToJSON, Aeson.FromJSON)
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON MarkedString)
diff --git a/generated/Language/LSP/Protocol/Internal/Types/MarkupContent.hs b/generated/Language/LSP/Protocol/Internal/Types/MarkupContent.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/MarkupContent.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/MarkupContent.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -51,6 +53,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON MarkupContent)
 
 instance Aeson.ToJSON MarkupContent where
   toJSON (MarkupContent arg0 arg1) = Aeson.object $ concat $  [["kind" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -36,6 +38,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum MarkupKind Data.Text.Text)
+  deriving Pretty via (ViaJSON MarkupKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum MarkupKind where
   knownValues = Data.Set.fromList [MarkupKind_PlainText,MarkupKind_Markdown]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/MessageActionItem.hs b/generated/Language/LSP/Protocol/Internal/Types/MessageActionItem.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/MessageActionItem.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/MessageActionItem.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -25,6 +27,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON MessageActionItem)
 
 instance Aeson.ToJSON MessageActionItem where
   toJSON (MessageActionItem arg0) = Aeson.object $ concat $  [["title" Aeson..= arg0]]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -40,6 +42,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum MessageType Language.LSP.Protocol.Types.Common.UInt)
+  deriving Pretty via (ViaJSON MessageType)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum MessageType where
   knownValues = Data.Set.fromList [MessageType_Error
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -42,6 +44,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON Moniker)
 
 instance Aeson.ToJSON Moniker where
   toJSON (Moniker arg0 arg1 arg2 arg3) = Aeson.object $ concat $  [["scheme" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -28,6 +30,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON MonikerClientCapabilities)
 
 instance Aeson.ToJSON MonikerClientCapabilities where
   toJSON (MonikerClientCapabilities arg0) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -39,6 +41,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum MonikerKind Data.Text.Text)
+  deriving Pretty via (ViaJSON MonikerKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum MonikerKind where
   knownValues = Data.Set.fromList [MonikerKind_Import
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -24,6 +26,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON MonikerOptions)
 
 instance Aeson.ToJSON MonikerOptions where
   toJSON (MonikerOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -40,6 +42,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON MonikerParams)
 
 instance Aeson.ToJSON MonikerParams where
   toJSON (MonikerParams arg0 arg1 arg2 arg3) = Aeson.object $ concat $  [["textDocument" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -30,6 +32,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON MonikerRegistrationOptions)
 
 instance Aeson.ToJSON MonikerRegistrationOptions where
   toJSON (MonikerRegistrationOptions arg0 arg1) = Aeson.object $ concat $  [["documentSelector" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
@@ -50,6 +52,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON NotebookCell)
 
 instance Aeson.ToJSON NotebookCell where
   toJSON (NotebookCell arg0 arg1 arg2 arg3) = Aeson.object $ concat $  [["kind" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -36,6 +38,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON NotebookCellArrayChange)
 
 instance Aeson.ToJSON NotebookCellArrayChange where
   toJSON (NotebookCellArrayChange arg0 arg1 arg2) = Aeson.object $ concat $  [["start" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -34,6 +36,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum NotebookCellKind Language.LSP.Protocol.Types.Common.UInt)
+  deriving Pretty via (ViaJSON NotebookCellKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum NotebookCellKind where
   knownValues = Data.Set.fromList [NotebookCellKind_Markup
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -39,6 +41,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON NotebookCellTextDocumentFilter)
 
 instance Aeson.ToJSON NotebookCellTextDocumentFilter where
   toJSON (NotebookCellTextDocumentFilter arg0 arg1) = Aeson.object $ concat $  [["notebook" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
@@ -50,6 +52,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON NotebookDocument)
 
 instance Aeson.ToJSON NotebookDocument where
   toJSON (NotebookDocument arg0 arg1 arg2 arg3 arg4) = Aeson.object $ concat $  [["uri" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
@@ -40,6 +42,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON NotebookDocumentChangeEvent)
 
 instance Aeson.ToJSON NotebookDocumentChangeEvent where
   toJSON (NotebookDocumentChangeEvent arg0 arg1) = Aeson.object $ concat $  ["metadata" Language.LSP.Protocol.Types.Common..=? arg0
diff --git a/generated/Language/LSP/Protocol/Internal/Types/NotebookDocumentClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/NotebookDocumentClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/NotebookDocumentClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/NotebookDocumentClientCapabilities.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -29,6 +31,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON NotebookDocumentClientCapabilities)
 
 instance Aeson.ToJSON NotebookDocumentClientCapabilities where
   toJSON (NotebookDocumentClientCapabilities arg0) = Aeson.object $ concat $  [["synchronization" Aeson..= arg0]]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/NotebookDocumentFilter.hs b/generated/Language/LSP/Protocol/Internal/Types/NotebookDocumentFilter.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/NotebookDocumentFilter.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/NotebookDocumentFilter.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
 import qualified Data.Row.Aeson as Aeson
@@ -26,3 +28,4 @@
   deriving newtype (Aeson.ToJSON, Aeson.FromJSON)
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON NotebookDocumentFilter)
diff --git a/generated/Language/LSP/Protocol/Internal/Types/NotebookDocumentIdentifier.hs b/generated/Language/LSP/Protocol/Internal/Types/NotebookDocumentIdentifier.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/NotebookDocumentIdentifier.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/NotebookDocumentIdentifier.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -27,6 +29,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON NotebookDocumentIdentifier)
 
 instance Aeson.ToJSON NotebookDocumentIdentifier where
   toJSON (NotebookDocumentIdentifier arg0) = Aeson.object $ concat $  [["uri" Aeson..= arg0]]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -33,6 +35,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON NotebookDocumentSyncClientCapabilities)
 
 instance Aeson.ToJSON NotebookDocumentSyncClientCapabilities where
   toJSON (NotebookDocumentSyncClientCapabilities arg0 arg1) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
 import qualified Data.Row.Aeson as Aeson
@@ -44,6 +46,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON NotebookDocumentSyncOptions)
 
 instance Aeson.ToJSON NotebookDocumentSyncOptions where
   toJSON (NotebookDocumentSyncOptions arg0 arg1) = Aeson.object $ concat $  [["notebookSelector" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
 import qualified Data.Row.Aeson as Aeson
@@ -39,6 +41,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON NotebookDocumentSyncRegistrationOptions)
 
 instance Aeson.ToJSON NotebookDocumentSyncRegistrationOptions where
   toJSON (NotebookDocumentSyncRegistrationOptions arg0 arg1 arg2) = Aeson.object $ concat $  [["notebookSelector" Aeson..= arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/OptionalVersionedTextDocumentIdentifier.hs b/generated/Language/LSP/Protocol/Internal/Types/OptionalVersionedTextDocumentIdentifier.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/OptionalVersionedTextDocumentIdentifier.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/OptionalVersionedTextDocumentIdentifier.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -33,6 +35,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON OptionalVersionedTextDocumentIdentifier)
 
 instance Aeson.ToJSON OptionalVersionedTextDocumentIdentifier where
   toJSON (OptionalVersionedTextDocumentIdentifier arg0 arg1) = Aeson.object $ concat $  [["uri" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -40,6 +42,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ParameterInformation)
 
 instance Aeson.ToJSON ParameterInformation where
   toJSON (ParameterInformation arg0 arg1) = Aeson.object $ concat $  [["label" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -26,6 +28,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON PartialResultParams)
 
 instance Aeson.ToJSON PartialResultParams where
   toJSON (PartialResultParams arg0) = Aeson.object $ concat $  ["partialResultToken" Language.LSP.Protocol.Types.Common..=? arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/Pattern.hs b/generated/Language/LSP/Protocol/Internal/Types/Pattern.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/Pattern.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/Pattern.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -31,3 +33,4 @@
   , Aeson.FromJSONKey )
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON Pattern)
diff --git a/generated/Language/LSP/Protocol/Internal/Types/Position.hs b/generated/Language/LSP/Protocol/Internal/Types/Position.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/Position.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/Position.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -63,6 +65,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON Position)
 
 instance Aeson.ToJSON Position where
   toJSON (Position arg0 arg1) = Aeson.object $ concat $  [["line" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -47,6 +49,7 @@
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON
   , Data.String.IsString ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum PositionEncodingKind Data.Text.Text)
+  deriving Pretty via (ViaJSON PositionEncodingKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum PositionEncodingKind where
   knownValues = Data.Set.fromList [PositionEncodingKind_UTF8
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -35,6 +37,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON PrepareRenameParams)
 
 instance Aeson.ToJSON PrepareRenameParams where
   toJSON (PrepareRenameParams arg0 arg1 arg2) = Aeson.object $ concat $  [["textDocument" Aeson..= arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/PrepareRenameResult.hs b/generated/Language/LSP/Protocol/Internal/Types/PrepareRenameResult.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/PrepareRenameResult.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/PrepareRenameResult.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
 import qualified Data.Row.Aeson as Aeson
@@ -23,3 +25,4 @@
   deriving newtype (Aeson.ToJSON, Aeson.FromJSON)
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON PrepareRenameResult)
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -29,6 +31,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum PrepareSupportDefaultBehavior Language.LSP.Protocol.Types.Common.UInt)
+  deriving Pretty via (ViaJSON PrepareSupportDefaultBehavior)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum PrepareSupportDefaultBehavior where
   knownValues = Data.Set.fromList [PrepareSupportDefaultBehavior_Identifier]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/PreviousResultId.hs b/generated/Language/LSP/Protocol/Internal/Types/PreviousResultId.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/PreviousResultId.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/PreviousResultId.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -33,6 +35,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON PreviousResultId)
 
 instance Aeson.ToJSON PreviousResultId where
   toJSON (PreviousResultId arg0 arg1) = Aeson.object $ concat $  [["uri" Aeson..= arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ProgressParams.hs b/generated/Language/LSP/Protocol/Internal/Types/ProgressParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ProgressParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ProgressParams.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
@@ -30,6 +32,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ProgressParams)
 
 instance Aeson.ToJSON ProgressParams where
   toJSON (ProgressParams arg0 arg1) = Aeson.object $ concat $  [["token" Aeson..= arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ProgressToken.hs b/generated/Language/LSP/Protocol/Internal/Types/ProgressToken.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ProgressToken.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ProgressToken.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -21,3 +23,4 @@
   deriving newtype (Aeson.ToJSON, Aeson.FromJSON)
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ProgressToken)
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
 import qualified Data.Row.Aeson as Aeson
@@ -54,6 +56,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON PublishDiagnosticsClientCapabilities)
 
 instance Aeson.ToJSON PublishDiagnosticsClientCapabilities where
   toJSON (PublishDiagnosticsClientCapabilities arg0 arg1 arg2 arg3 arg4) = Aeson.object $ concat $  ["relatedInformation" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -36,6 +38,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON PublishDiagnosticsParams)
 
 instance Aeson.ToJSON PublishDiagnosticsParams where
   toJSON (PublishDiagnosticsParams arg0 arg1 arg2) = Aeson.object $ concat $  [["uri" Aeson..= arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/Range.hs b/generated/Language/LSP/Protocol/Internal/Types/Range.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/Range.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/Range.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -39,6 +41,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON Range)
 
 instance Aeson.ToJSON Range where
   toJSON (Range arg0 arg1) = Aeson.object $ concat $  [["start" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -24,6 +26,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ReferenceClientCapabilities)
 
 instance Aeson.ToJSON ReferenceClientCapabilities where
   toJSON (ReferenceClientCapabilities arg0) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ReferenceContext.hs b/generated/Language/LSP/Protocol/Internal/Types/ReferenceContext.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ReferenceContext.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ReferenceContext.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -25,6 +27,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ReferenceContext)
 
 instance Aeson.ToJSON ReferenceContext where
   toJSON (ReferenceContext arg0) = Aeson.object $ concat $  [["includeDeclaration" Aeson..= arg0]]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -24,6 +26,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ReferenceOptions)
 
 instance Aeson.ToJSON ReferenceOptions where
   toJSON (ReferenceOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -45,6 +47,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ReferenceParams)
 
 instance Aeson.ToJSON ReferenceParams where
   toJSON (ReferenceParams arg0 arg1 arg2 arg3 arg4) = Aeson.object $ concat $  [["textDocument" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -30,6 +32,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ReferenceRegistrationOptions)
 
 instance Aeson.ToJSON ReferenceRegistrationOptions where
   toJSON (ReferenceRegistrationOptions arg0 arg1) = Aeson.object $ concat $  [["documentSelector" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
@@ -35,6 +37,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON Registration)
 
 instance Aeson.ToJSON Registration where
   toJSON (Registration arg0 arg1 arg2) = Aeson.object $ concat $  [["id" Aeson..= arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/RegistrationParams.hs b/generated/Language/LSP/Protocol/Internal/Types/RegistrationParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/RegistrationParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/RegistrationParams.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -25,6 +27,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON RegistrationParams)
 
 instance Aeson.ToJSON RegistrationParams where
   toJSON (RegistrationParams arg0) = Aeson.object $ concat $  [["registrations" Aeson..= arg0]]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -31,6 +33,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON RegularExpressionsClientCapabilities)
 
 instance Aeson.ToJSON RegularExpressionsClientCapabilities where
   toJSON (RegularExpressionsClientCapabilities arg0 arg1) = Aeson.object $ concat $  [["engine" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Map
 import qualified Data.Row.Aeson as Aeson
@@ -53,6 +55,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON RelatedFullDocumentDiagnosticReport)
 
 instance Aeson.ToJSON RelatedFullDocumentDiagnosticReport where
   toJSON (RelatedFullDocumentDiagnosticReport arg0 arg1 arg2 arg3) = Aeson.object $ concat $  [["kind" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Map
 import qualified Data.Row.Aeson as Aeson
@@ -50,6 +52,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON RelatedUnchangedDocumentDiagnosticReport)
 
 instance Aeson.ToJSON RelatedUnchangedDocumentDiagnosticReport where
   toJSON (RelatedUnchangedDocumentDiagnosticReport arg0 arg1 arg2) = Aeson.object $ concat $  [["kind" Aeson..= arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/RelativePattern.hs b/generated/Language/LSP/Protocol/Internal/Types/RelativePattern.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/RelativePattern.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/RelativePattern.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -36,6 +38,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON RelativePattern)
 
 instance Aeson.ToJSON RelativePattern where
   toJSON (RelativePattern arg0 arg1) = Aeson.object $ concat $  [["baseUri" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -51,6 +53,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON RenameClientCapabilities)
 
 instance Aeson.ToJSON RenameClientCapabilities where
   toJSON (RenameClientCapabilities arg0 arg1 arg2 arg3) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -46,6 +48,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON RenameFile)
 
 instance Aeson.ToJSON RenameFile where
   toJSON (RenameFile arg0 arg1 arg2 arg3 arg4) = Aeson.object $ concat $  ["annotationId" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -28,6 +30,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON RenameFileOptions)
 
 instance Aeson.ToJSON RenameFileOptions where
   toJSON (RenameFileOptions arg0 arg1) = Aeson.object $ concat $  ["overwrite" Language.LSP.Protocol.Types.Common..=? arg0
diff --git a/generated/Language/LSP/Protocol/Internal/Types/RenameFilesParams.hs b/generated/Language/LSP/Protocol/Internal/Types/RenameFilesParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/RenameFilesParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/RenameFilesParams.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -29,6 +31,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON RenameFilesParams)
 
 instance Aeson.ToJSON RenameFilesParams where
   toJSON (RenameFilesParams arg0) = Aeson.object $ concat $  [["files" Aeson..= arg0]]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -30,6 +32,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON RenameOptions)
 
 instance Aeson.ToJSON RenameOptions where
   toJSON (RenameOptions arg0 arg1) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -42,6 +44,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON RenameParams)
 
 instance Aeson.ToJSON RenameParams where
   toJSON (RenameParams arg0 arg1 arg2 arg3) = Aeson.object $ concat $  ["workDoneToken" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -36,6 +38,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON RenameRegistrationOptions)
 
 instance Aeson.ToJSON RenameRegistrationOptions where
   toJSON (RenameRegistrationOptions arg0 arg1 arg2) = Aeson.object $ concat $  [["documentSelector" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -32,6 +34,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ResourceOperation)
 
 instance Aeson.ToJSON ResourceOperation where
   toJSON (ResourceOperation arg0 arg1) = Aeson.object $ concat $  [["kind" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -36,6 +38,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum ResourceOperationKind Data.Text.Text)
+  deriving Pretty via (ViaJSON ResourceOperationKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum ResourceOperationKind where
   knownValues = Data.Set.fromList [ResourceOperationKind_Create
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -24,6 +26,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON SaveOptions)
 
 instance Aeson.ToJSON SaveOptions where
   toJSON (SaveOptions arg0) = Aeson.object $ concat $  ["includeText" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -30,6 +32,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON SelectionRange)
 
 instance Aeson.ToJSON SelectionRange where
   toJSON (SelectionRange arg0 arg1) = Aeson.object $ concat $  [["range" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -26,6 +28,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON SelectionRangeClientCapabilities)
 
 instance Aeson.ToJSON SelectionRangeClientCapabilities where
   toJSON (SelectionRangeClientCapabilities arg0) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -24,6 +26,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON SelectionRangeOptions)
 
 instance Aeson.ToJSON SelectionRangeOptions where
   toJSON (SelectionRangeOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -40,6 +42,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON SelectionRangeParams)
 
 instance Aeson.ToJSON SelectionRangeParams where
   toJSON (SelectionRangeParams arg0 arg1 arg2 arg3) = Aeson.object $ concat $  ["workDoneToken" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -36,6 +38,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON SelectionRangeRegistrationOptions)
 
 instance Aeson.ToJSON SelectionRangeRegistrationOptions where
   toJSON (SelectionRangeRegistrationOptions arg0 arg1 arg2) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -70,6 +72,7 @@
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON
   , Data.String.IsString ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum SemanticTokenModifiers Data.Text.Text)
+  deriving Pretty via (ViaJSON SemanticTokenModifiers)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum SemanticTokenModifiers where
   knownValues = Data.Set.fromList [SemanticTokenModifiers_Declaration
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -123,6 +125,7 @@
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON
   , Data.String.IsString ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum SemanticTokenTypes Data.Text.Text)
+  deriving Pretty via (ViaJSON SemanticTokenTypes)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum SemanticTokenTypes where
   knownValues = Data.Set.fromList [SemanticTokenTypes_Namespace
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -32,6 +34,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON SemanticTokens)
 
 instance Aeson.ToJSON SemanticTokens where
   toJSON (SemanticTokens arg0 arg1) = Aeson.object $ concat $  ["resultId" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
 import qualified Data.Row.Aeson as Aeson
@@ -82,6 +84,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON SemanticTokensClientCapabilities)
 
 instance Aeson.ToJSON SemanticTokensClientCapabilities where
   toJSON (SemanticTokensClientCapabilities arg0 arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -30,6 +32,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON SemanticTokensDelta)
 
 instance Aeson.ToJSON SemanticTokensDelta where
   toJSON (SemanticTokensDelta arg0 arg1) = Aeson.object $ concat $  ["resultId" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -41,6 +43,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON SemanticTokensDeltaParams)
 
 instance Aeson.ToJSON SemanticTokensDeltaParams where
   toJSON (SemanticTokensDeltaParams arg0 arg1 arg2 arg3) = Aeson.object $ concat $  ["workDoneToken" Language.LSP.Protocol.Types.Common..=? arg0
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensDeltaPartialResult.hs b/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensDeltaPartialResult.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensDeltaPartialResult.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensDeltaPartialResult.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -25,6 +27,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON SemanticTokensDeltaPartialResult)
 
 instance Aeson.ToJSON SemanticTokensDeltaPartialResult where
   toJSON (SemanticTokensDeltaPartialResult arg0) = Aeson.object $ concat $  [["edits" Aeson..= arg0]]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -32,6 +34,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON SemanticTokensEdit)
 
 instance Aeson.ToJSON SemanticTokensEdit where
   toJSON (SemanticTokensEdit arg0 arg1 arg2) = Aeson.object $ concat $  [["start" Aeson..= arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensLegend.hs b/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensLegend.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensLegend.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensLegend.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -29,6 +31,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON SemanticTokensLegend)
 
 instance Aeson.ToJSON SemanticTokensLegend where
   toJSON (SemanticTokensLegend arg0 arg1) = Aeson.object $ concat $  [["tokenTypes" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
 import qualified Data.Row.Aeson as Aeson
@@ -39,6 +41,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON SemanticTokensOptions)
 
 instance Aeson.ToJSON SemanticTokensOptions where
   toJSON (SemanticTokensOptions arg0 arg1 arg2 arg3) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -35,6 +37,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON SemanticTokensParams)
 
 instance Aeson.ToJSON SemanticTokensParams where
   toJSON (SemanticTokensParams arg0 arg1 arg2) = Aeson.object $ concat $  ["workDoneToken" Language.LSP.Protocol.Types.Common..=? arg0
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensPartialResult.hs b/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensPartialResult.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensPartialResult.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SemanticTokensPartialResult.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -24,6 +26,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON SemanticTokensPartialResult)
 
 instance Aeson.ToJSON SemanticTokensPartialResult where
   toJSON (SemanticTokensPartialResult arg0) = Aeson.object $ concat $  [["data" Aeson..= arg0]]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -40,6 +42,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON SemanticTokensRangeParams)
 
 instance Aeson.ToJSON SemanticTokensRangeParams where
   toJSON (SemanticTokensRangeParams arg0 arg1 arg2 arg3) = Aeson.object $ concat $  ["workDoneToken" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
 import qualified Data.Row.Aeson as Aeson
@@ -51,6 +53,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON SemanticTokensRegistrationOptions)
 
 instance Aeson.ToJSON SemanticTokensRegistrationOptions where
   toJSON (SemanticTokensRegistrationOptions arg0 arg1 arg2 arg3 arg4 arg5) = Aeson.object $ concat $  [["documentSelector" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -30,6 +32,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON SemanticTokensWorkspaceClientCapabilities)
 
 instance Aeson.ToJSON SemanticTokensWorkspaceClientCapabilities where
   toJSON (SemanticTokensWorkspaceClientCapabilities arg0) = Aeson.object $ concat $  ["refreshSupport" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
@@ -246,6 +248,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ServerCapabilities)
 
 instance Aeson.ToJSON ServerCapabilities where
   toJSON (ServerCapabilities arg0 arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 arg11 arg12 arg13 arg14 arg15 arg16 arg17 arg18 arg19 arg20 arg21 arg22 arg23 arg24 arg25 arg26 arg27 arg28 arg29 arg30 arg31 arg32 arg33 arg34) = Aeson.object $ concat $  ["positionEncoding" Language.LSP.Protocol.Types.Common..=? arg0
diff --git a/generated/Language/LSP/Protocol/Internal/Types/SetTraceParams.hs b/generated/Language/LSP/Protocol/Internal/Types/SetTraceParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/SetTraceParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/SetTraceParams.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -25,6 +27,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON SetTraceParams)
 
 instance Aeson.ToJSON SetTraceParams where
   toJSON (SetTraceParams arg0) = Aeson.object $ concat $  [["value" Aeson..= arg0]]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ShowDocumentClientCapabilities.hs b/generated/Language/LSP/Protocol/Internal/Types/ShowDocumentClientCapabilities.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ShowDocumentClientCapabilities.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ShowDocumentClientCapabilities.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -27,6 +29,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ShowDocumentClientCapabilities)
 
 instance Aeson.ToJSON ShowDocumentClientCapabilities where
   toJSON (ShowDocumentClientCapabilities arg0) = Aeson.object $ concat $  [["support" Aeson..= arg0]]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -48,6 +50,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ShowDocumentParams)
 
 instance Aeson.ToJSON ShowDocumentParams where
   toJSON (ShowDocumentParams arg0 arg1 arg2 arg3) = Aeson.object $ concat $  [["uri" Aeson..= arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ShowDocumentResult.hs b/generated/Language/LSP/Protocol/Internal/Types/ShowDocumentResult.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ShowDocumentResult.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ShowDocumentResult.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -26,6 +28,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ShowDocumentResult)
 
 instance Aeson.ToJSON ShowDocumentResult where
   toJSON (ShowDocumentResult arg0) = Aeson.object $ concat $  [["success" Aeson..= arg0]]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/ShowMessageParams.hs b/generated/Language/LSP/Protocol/Internal/Types/ShowMessageParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/ShowMessageParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/ShowMessageParams.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -30,6 +32,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ShowMessageParams)
 
 instance Aeson.ToJSON ShowMessageParams where
   toJSON (ShowMessageParams arg0 arg1) = Aeson.object $ concat $  [["type" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
 import qualified Data.Row.Aeson as Aeson
@@ -25,6 +27,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ShowMessageRequestClientCapabilities)
 
 instance Aeson.ToJSON ShowMessageRequestClientCapabilities where
   toJSON (ShowMessageRequestClientCapabilities arg0) = Aeson.object $ concat $  ["messageActionItem" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -35,6 +37,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON ShowMessageRequestParams)
 
 instance Aeson.ToJSON ShowMessageRequestParams where
   toJSON (ShowMessageRequestParams arg0 arg1 arg2) = Aeson.object $ concat $  [["type" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -49,6 +51,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON SignatureHelp)
 
 instance Aeson.ToJSON SignatureHelp where
   toJSON (SignatureHelp arg0 arg1 arg2) = Aeson.object $ concat $  [["signatures" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
 import qualified Data.Row.Aeson as Aeson
@@ -40,6 +42,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON SignatureHelpClientCapabilities)
 
 instance Aeson.ToJSON SignatureHelpClientCapabilities where
   toJSON (SignatureHelpClientCapabilities arg0 arg1 arg2) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -49,6 +51,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON SignatureHelpContext)
 
 instance Aeson.ToJSON SignatureHelpContext where
   toJSON (SignatureHelpContext arg0 arg1 arg2 arg3) = Aeson.object $ concat $  [["triggerKind" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -38,6 +40,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON SignatureHelpOptions)
 
 instance Aeson.ToJSON SignatureHelpOptions where
   toJSON (SignatureHelpOptions arg0 arg1 arg2) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -43,6 +45,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON SignatureHelpParams)
 
 instance Aeson.ToJSON SignatureHelpParams where
   toJSON (SignatureHelpParams arg0 arg1 arg2 arg3) = Aeson.object $ concat $  [["textDocument" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -44,6 +46,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON SignatureHelpRegistrationOptions)
 
 instance Aeson.ToJSON SignatureHelpRegistrationOptions where
   toJSON (SignatureHelpRegistrationOptions arg0 arg1 arg2 arg3) = Aeson.object $ concat $  [["documentSelector" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -38,6 +40,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum SignatureHelpTriggerKind Language.LSP.Protocol.Types.Common.UInt)
+  deriving Pretty via (ViaJSON SignatureHelpTriggerKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum SignatureHelpTriggerKind where
   knownValues = Data.Set.fromList [SignatureHelpTriggerKind_Invoked
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -47,6 +49,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON SignatureInformation)
 
 instance Aeson.ToJSON SignatureInformation where
   toJSON (SignatureInformation arg0 arg1 arg2 arg3) = Aeson.object $ concat $  [["label" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -27,6 +29,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON StaticRegistrationOptions)
 
 instance Aeson.ToJSON StaticRegistrationOptions where
   toJSON (StaticRegistrationOptions arg0) = Aeson.object $ concat $  ["id" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -64,6 +66,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON SymbolInformation)
 
 instance Aeson.ToJSON SymbolInformation where
   toJSON (SymbolInformation arg0 arg1 arg2 arg3 arg4 arg5) = Aeson.object $ concat $  [["name" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -128,6 +130,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum SymbolKind Language.LSP.Protocol.Types.Common.UInt)
+  deriving Pretty via (ViaJSON SymbolKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum SymbolKind where
   knownValues = Data.Set.fromList [SymbolKind_File
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -30,6 +32,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum SymbolTag Language.LSP.Protocol.Types.Common.UInt)
+  deriving Pretty via (ViaJSON SymbolTag)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum SymbolTag where
   knownValues = Data.Set.fromList [SymbolTag_Deprecated]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/TextDocumentChangeRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/TextDocumentChangeRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/TextDocumentChangeRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/TextDocumentChangeRegistrationOptions.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -31,6 +33,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON TextDocumentChangeRegistrationOptions)
 
 instance Aeson.ToJSON TextDocumentChangeRegistrationOptions where
   toJSON (TextDocumentChangeRegistrationOptions arg0 arg1) = Aeson.object $ concat $  [["documentSelector" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -199,6 +201,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON TextDocumentClientCapabilities)
 
 instance Aeson.ToJSON TextDocumentClientCapabilities where
   toJSON (TextDocumentClientCapabilities arg0 arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 arg11 arg12 arg13 arg14 arg15 arg16 arg17 arg18 arg19 arg20 arg21 arg22 arg23 arg24 arg25 arg26 arg27 arg28 arg29) = Aeson.object $ concat $  ["synchronization" Language.LSP.Protocol.Types.Common..=? arg0
diff --git a/generated/Language/LSP/Protocol/Internal/Types/TextDocumentContentChangeEvent.hs b/generated/Language/LSP/Protocol/Internal/Types/TextDocumentContentChangeEvent.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/TextDocumentContentChangeEvent.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/TextDocumentContentChangeEvent.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
 import qualified Data.Row.Aeson as Aeson
@@ -24,3 +26,4 @@
   deriving newtype (Aeson.ToJSON, Aeson.FromJSON)
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON TextDocumentContentChangeEvent)
diff --git a/generated/Language/LSP/Protocol/Internal/Types/TextDocumentEdit.hs b/generated/Language/LSP/Protocol/Internal/Types/TextDocumentEdit.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/TextDocumentEdit.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/TextDocumentEdit.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -37,6 +39,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON TextDocumentEdit)
 
 instance Aeson.ToJSON TextDocumentEdit where
   toJSON (TextDocumentEdit arg0 arg1) = Aeson.object $ concat $  [["textDocument" Aeson..= arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/TextDocumentFilter.hs b/generated/Language/LSP/Protocol/Internal/Types/TextDocumentFilter.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/TextDocumentFilter.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/TextDocumentFilter.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
 import qualified Data.Row.Aeson as Aeson
@@ -37,3 +39,4 @@
   deriving newtype (Aeson.ToJSON, Aeson.FromJSON)
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON TextDocumentFilter)
diff --git a/generated/Language/LSP/Protocol/Internal/Types/TextDocumentIdentifier.hs b/generated/Language/LSP/Protocol/Internal/Types/TextDocumentIdentifier.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/TextDocumentIdentifier.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/TextDocumentIdentifier.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -25,6 +27,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON TextDocumentIdentifier)
 
 instance Aeson.ToJSON TextDocumentIdentifier where
   toJSON (TextDocumentIdentifier arg0) = Aeson.object $ concat $  [["uri" Aeson..= arg0]]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/TextDocumentItem.hs b/generated/Language/LSP/Protocol/Internal/Types/TextDocumentItem.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/TextDocumentItem.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/TextDocumentItem.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -40,6 +42,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON TextDocumentItem)
 
 instance Aeson.ToJSON TextDocumentItem where
   toJSON (TextDocumentItem arg0 arg1 arg2 arg3) = Aeson.object $ concat $  [["uri" Aeson..= arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/TextDocumentPositionParams.hs b/generated/Language/LSP/Protocol/Internal/Types/TextDocumentPositionParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/TextDocumentPositionParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/TextDocumentPositionParams.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -31,6 +33,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON TextDocumentPositionParams)
 
 instance Aeson.ToJSON TextDocumentPositionParams where
   toJSON (TextDocumentPositionParams arg0 arg1) = Aeson.object $ concat $  [["textDocument" Aeson..= arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/TextDocumentRegistrationOptions.hs b/generated/Language/LSP/Protocol/Internal/Types/TextDocumentRegistrationOptions.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/TextDocumentRegistrationOptions.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/TextDocumentRegistrationOptions.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -26,6 +28,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON TextDocumentRegistrationOptions)
 
 instance Aeson.ToJSON TextDocumentRegistrationOptions where
   toJSON (TextDocumentRegistrationOptions arg0) = Aeson.object $ concat $  [["documentSelector" Aeson..= arg0]]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -37,6 +39,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum TextDocumentSaveReason Language.LSP.Protocol.Types.Common.UInt)
+  deriving Pretty via (ViaJSON TextDocumentSaveReason)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum TextDocumentSaveReason where
   knownValues = Data.Set.fromList [TextDocumentSaveReason_Manual
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -30,6 +32,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON TextDocumentSaveRegistrationOptions)
 
 instance Aeson.ToJSON TextDocumentSaveRegistrationOptions where
   toJSON (TextDocumentSaveRegistrationOptions arg0 arg1) = Aeson.object $ concat $  [["documentSelector" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -38,6 +40,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON TextDocumentSyncClientCapabilities)
 
 instance Aeson.ToJSON TextDocumentSyncClientCapabilities where
   toJSON (TextDocumentSyncClientCapabilities arg0 arg1 arg2 arg3) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -40,6 +42,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum TextDocumentSyncKind Language.LSP.Protocol.Types.Common.UInt)
+  deriving Pretty via (ViaJSON TextDocumentSyncKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum TextDocumentSyncKind where
   knownValues = Data.Set.fromList [TextDocumentSyncKind_None
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -47,6 +49,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON TextDocumentSyncOptions)
 
 instance Aeson.ToJSON TextDocumentSyncOptions where
   toJSON (TextDocumentSyncOptions arg0 arg1 arg2 arg3 arg4) = Aeson.object $ concat $  ["openClose" Language.LSP.Protocol.Types.Common..=? arg0
diff --git a/generated/Language/LSP/Protocol/Internal/Types/TextEdit.hs b/generated/Language/LSP/Protocol/Internal/Types/TextEdit.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/TextEdit.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/TextEdit.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -32,6 +34,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON TextEdit)
 
 instance Aeson.ToJSON TextEdit where
   toJSON (TextEdit arg0 arg1) = Aeson.object $ concat $  [["range" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -28,6 +30,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum TokenFormat Data.Text.Text)
+  deriving Pretty via (ViaJSON TokenFormat)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum TokenFormat where
   knownValues = Data.Set.fromList [TokenFormat_Relative]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -36,6 +38,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum TraceValues Data.Text.Text)
+  deriving Pretty via (ViaJSON TraceValues)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum TraceValues where
   knownValues = Data.Set.fromList [TraceValues_Off
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -32,6 +34,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON TypeDefinitionClientCapabilities)
 
 instance Aeson.ToJSON TypeDefinitionClientCapabilities where
   toJSON (TypeDefinitionClientCapabilities arg0 arg1) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -24,6 +26,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON TypeDefinitionOptions)
 
 instance Aeson.ToJSON TypeDefinitionOptions where
   toJSON (TypeDefinitionOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -40,6 +42,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON TypeDefinitionParams)
 
 instance Aeson.ToJSON TypeDefinitionParams where
   toJSON (TypeDefinitionParams arg0 arg1 arg2 arg3) = Aeson.object $ concat $  [["textDocument" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -36,6 +38,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON TypeDefinitionRegistrationOptions)
 
 instance Aeson.ToJSON TypeDefinitionRegistrationOptions where
   toJSON (TypeDefinitionRegistrationOptions arg0 arg1 arg2) = Aeson.object $ concat $  [["documentSelector" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -26,6 +28,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON TypeHierarchyClientCapabilities)
 
 instance Aeson.ToJSON TypeHierarchyClientCapabilities where
   toJSON (TypeHierarchyClientCapabilities arg0) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
@@ -64,6 +66,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON TypeHierarchyItem)
 
 instance Aeson.ToJSON TypeHierarchyItem where
   toJSON (TypeHierarchyItem arg0 arg1 arg2 arg3 arg4 arg5 arg6 arg7) = Aeson.object $ concat $  [["name" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -26,6 +28,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON TypeHierarchyOptions)
 
 instance Aeson.ToJSON TypeHierarchyOptions where
   toJSON (TypeHierarchyOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -37,6 +39,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON TypeHierarchyPrepareParams)
 
 instance Aeson.ToJSON TypeHierarchyPrepareParams where
   toJSON (TypeHierarchyPrepareParams arg0 arg1 arg2) = Aeson.object $ concat $  [["textDocument" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -38,6 +40,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON TypeHierarchyRegistrationOptions)
 
 instance Aeson.ToJSON TypeHierarchyRegistrationOptions where
   toJSON (TypeHierarchyRegistrationOptions arg0 arg1 arg2) = Aeson.object $ concat $  [["documentSelector" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -37,6 +39,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON TypeHierarchySubtypesParams)
 
 instance Aeson.ToJSON TypeHierarchySubtypesParams where
   toJSON (TypeHierarchySubtypesParams arg0 arg1 arg2) = Aeson.object $ concat $  ["workDoneToken" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -37,6 +39,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON TypeHierarchySupertypesParams)
 
 instance Aeson.ToJSON TypeHierarchySupertypesParams where
   toJSON (TypeHierarchySupertypesParams arg0 arg1 arg2) = Aeson.object $ concat $  ["workDoneToken" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
@@ -83,6 +85,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON UInitializeParams)
 
 instance Aeson.ToJSON UInitializeParams where
   toJSON (UInitializeParams arg0 arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8) = Aeson.object $ concat $  ["workDoneToken" Language.LSP.Protocol.Types.Common..=? arg0
diff --git a/generated/Language/LSP/Protocol/Internal/Types/UnchangedDocumentDiagnosticReport.hs b/generated/Language/LSP/Protocol/Internal/Types/UnchangedDocumentDiagnosticReport.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/UnchangedDocumentDiagnosticReport.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/UnchangedDocumentDiagnosticReport.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -37,6 +39,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON UnchangedDocumentDiagnosticReport)
 
 instance Aeson.ToJSON UnchangedDocumentDiagnosticReport where
   toJSON (UnchangedDocumentDiagnosticReport arg0 arg1) = Aeson.object $ concat $  [["kind" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -46,6 +48,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum UniquenessLevel Data.Text.Text)
+  deriving Pretty via (ViaJSON UniquenessLevel)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum UniquenessLevel where
   knownValues = Data.Set.fromList [UniquenessLevel_Document
diff --git a/generated/Language/LSP/Protocol/Internal/Types/Unregistration.hs b/generated/Language/LSP/Protocol/Internal/Types/Unregistration.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/Unregistration.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/Unregistration.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -30,6 +32,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON Unregistration)
 
 instance Aeson.ToJSON Unregistration where
   toJSON (Unregistration arg0 arg1) = Aeson.object $ concat $  [["id" Aeson..= arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/UnregistrationParams.hs b/generated/Language/LSP/Protocol/Internal/Types/UnregistrationParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/UnregistrationParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/UnregistrationParams.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -25,6 +27,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON UnregistrationParams)
 
 instance Aeson.ToJSON UnregistrationParams where
   toJSON (UnregistrationParams arg0) = Aeson.object $ concat $  [["unregisterations" Aeson..= arg0]]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/VersionedNotebookDocumentIdentifier.hs b/generated/Language/LSP/Protocol/Internal/Types/VersionedNotebookDocumentIdentifier.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/VersionedNotebookDocumentIdentifier.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/VersionedNotebookDocumentIdentifier.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -31,6 +33,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON VersionedNotebookDocumentIdentifier)
 
 instance Aeson.ToJSON VersionedNotebookDocumentIdentifier where
   toJSON (VersionedNotebookDocumentIdentifier arg0 arg1) = Aeson.object $ concat $  [["version" Aeson..= arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/VersionedTextDocumentIdentifier.hs b/generated/Language/LSP/Protocol/Internal/Types/VersionedTextDocumentIdentifier.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/VersionedTextDocumentIdentifier.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/VersionedTextDocumentIdentifier.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -29,6 +31,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON VersionedTextDocumentIdentifier)
 
 instance Aeson.ToJSON VersionedTextDocumentIdentifier where
   toJSON (VersionedTextDocumentIdentifier arg0 arg1) = Aeson.object $ concat $  [["uri" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -37,6 +39,7 @@
   deriving anyclass (NFData, Hashable)
   deriving ( Aeson.ToJSON
   , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum WatchKind Language.LSP.Protocol.Types.Common.UInt)
+  deriving Pretty via (ViaJSON WatchKind)
 
 instance Language.LSP.Protocol.Types.LspEnum.LspEnum WatchKind where
   knownValues = Data.Set.fromList [WatchKind_Create
diff --git a/generated/Language/LSP/Protocol/Internal/Types/WillSaveTextDocumentParams.hs b/generated/Language/LSP/Protocol/Internal/Types/WillSaveTextDocumentParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/WillSaveTextDocumentParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/WillSaveTextDocumentParams.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -30,6 +32,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON WillSaveTextDocumentParams)
 
 instance Aeson.ToJSON WillSaveTextDocumentParams where
   toJSON (WillSaveTextDocumentParams arg0 arg1) = Aeson.object $ concat $  [["textDocument" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -46,6 +48,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON WindowClientCapabilities)
 
 instance Aeson.ToJSON WindowClientCapabilities where
   toJSON (WindowClientCapabilities arg0 arg1 arg2) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -56,6 +58,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON WorkDoneProgressBegin)
 
 instance Aeson.ToJSON WorkDoneProgressBegin where
   toJSON (WorkDoneProgressBegin arg0 arg1 arg2 arg3 arg4) = Aeson.object $ concat $  [["kind" Aeson..= arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/WorkDoneProgressCancelParams.hs b/generated/Language/LSP/Protocol/Internal/Types/WorkDoneProgressCancelParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/WorkDoneProgressCancelParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/WorkDoneProgressCancelParams.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -25,6 +27,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON WorkDoneProgressCancelParams)
 
 instance Aeson.ToJSON WorkDoneProgressCancelParams where
   toJSON (WorkDoneProgressCancelParams arg0) = Aeson.object $ concat $  [["token" Aeson..= arg0]]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/WorkDoneProgressCreateParams.hs b/generated/Language/LSP/Protocol/Internal/Types/WorkDoneProgressCreateParams.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/WorkDoneProgressCreateParams.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/WorkDoneProgressCreateParams.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -25,6 +27,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON WorkDoneProgressCreateParams)
 
 instance Aeson.ToJSON WorkDoneProgressCreateParams where
   toJSON (WorkDoneProgressCreateParams arg0) = Aeson.object $ concat $  [["token" Aeson..= arg0]]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -31,6 +33,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON WorkDoneProgressEnd)
 
 instance Aeson.ToJSON WorkDoneProgressEnd where
   toJSON (WorkDoneProgressEnd arg0 arg1) = Aeson.object $ concat $  [["kind" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -24,6 +26,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON WorkDoneProgressOptions)
 
 instance Aeson.ToJSON WorkDoneProgressOptions where
   toJSON (WorkDoneProgressOptions arg0) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -25,6 +27,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON WorkDoneProgressParams)
 
 instance Aeson.ToJSON WorkDoneProgressParams where
   toJSON (WorkDoneProgressParams arg0) = Aeson.object $ concat $  ["workDoneToken" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -50,6 +52,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON WorkDoneProgressReport)
 
 instance Aeson.ToJSON WorkDoneProgressReport where
   toJSON (WorkDoneProgressReport arg0 arg1 arg2 arg3) = Aeson.object $ concat $  [["kind" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -110,6 +112,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON WorkspaceClientCapabilities)
 
 instance Aeson.ToJSON WorkspaceClientCapabilities where
   toJSON (WorkspaceClientCapabilities arg0 arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 arg11 arg12 arg13) = Aeson.object $ concat $  ["applyEdit" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -43,6 +45,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON WorkspaceDiagnosticParams)
 
 instance Aeson.ToJSON WorkspaceDiagnosticParams where
   toJSON (WorkspaceDiagnosticParams arg0 arg1 arg2 arg3) = Aeson.object $ concat $  ["workDoneToken" Language.LSP.Protocol.Types.Common..=? arg0
diff --git a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceDiagnosticReport.hs b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceDiagnosticReport.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceDiagnosticReport.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceDiagnosticReport.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -27,6 +29,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON WorkspaceDiagnosticReport)
 
 instance Aeson.ToJSON WorkspaceDiagnosticReport where
   toJSON (WorkspaceDiagnosticReport arg0) = Aeson.object $ concat $  [["items" Aeson..= arg0]]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceDiagnosticReportPartialResult.hs b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceDiagnosticReportPartialResult.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceDiagnosticReportPartialResult.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceDiagnosticReportPartialResult.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -27,6 +29,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON WorkspaceDiagnosticReportPartialResult)
 
 instance Aeson.ToJSON WorkspaceDiagnosticReportPartialResult where
   toJSON (WorkspaceDiagnosticReportPartialResult arg0) = Aeson.object $ concat $  [["items" Aeson..= arg0]]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceDocumentDiagnosticReport.hs b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceDocumentDiagnosticReport.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceDocumentDiagnosticReport.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceDocumentDiagnosticReport.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -24,3 +26,4 @@
   deriving newtype (Aeson.ToJSON, Aeson.FromJSON)
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON WorkspaceDocumentDiagnosticReport)
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Map
 import qualified Data.Row.Aeson as Aeson
@@ -66,6 +68,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON WorkspaceEdit)
 
 instance Aeson.ToJSON WorkspaceEdit where
   toJSON (WorkspaceEdit arg0 arg1 arg2) = Aeson.object $ concat $  ["changes" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
 import qualified Data.Row.Aeson as Aeson
@@ -58,6 +60,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON WorkspaceEditClientCapabilities)
 
 instance Aeson.ToJSON WorkspaceEditClientCapabilities where
   toJSON (WorkspaceEditClientCapabilities arg0 arg1 arg2 arg3 arg4) = Aeson.object $ concat $  ["documentChanges" Language.LSP.Protocol.Types.Common..=? arg0
diff --git a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceFolder.hs b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceFolder.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceFolder.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceFolder.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -31,6 +33,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON WorkspaceFolder)
 
 instance Aeson.ToJSON WorkspaceFolder where
   toJSON (WorkspaceFolder arg0 arg1) = Aeson.object $ concat $  [["uri" Aeson..= arg0]
diff --git a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceFoldersChangeEvent.hs b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceFoldersChangeEvent.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceFoldersChangeEvent.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceFoldersChangeEvent.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -29,6 +31,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON WorkspaceFoldersChangeEvent)
 
 instance Aeson.ToJSON WorkspaceFoldersChangeEvent where
   toJSON (WorkspaceFoldersChangeEvent arg0 arg1) = Aeson.object $ concat $  [["added" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -31,6 +33,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON WorkspaceFoldersInitializeParams)
 
 instance Aeson.ToJSON WorkspaceFoldersInitializeParams where
   toJSON (WorkspaceFoldersInitializeParams arg0) = Aeson.object $ concat $  ["workspaceFolders" Language.LSP.Protocol.Types.Common..=? arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -35,6 +37,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON WorkspaceFoldersServerCapabilities)
 
 instance Aeson.ToJSON WorkspaceFoldersServerCapabilities where
   toJSON (WorkspaceFoldersServerCapabilities arg0 arg1) = Aeson.object $ concat $  ["supported" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -49,6 +51,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON WorkspaceFullDocumentDiagnosticReport)
 
 instance Aeson.ToJSON WorkspaceFullDocumentDiagnosticReport where
   toJSON (WorkspaceFullDocumentDiagnosticReport arg0 arg1 arg2 arg3 arg4) = Aeson.object $ concat $  [["kind" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
@@ -65,6 +67,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON WorkspaceSymbol)
 
 instance Aeson.ToJSON WorkspaceSymbol where
   toJSON (WorkspaceSymbol arg0 arg1 arg2 arg3 arg4 arg5) = Aeson.object $ concat $  [["name" Aeson..= arg0]
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row as Row
 import qualified Data.Row.Aeson as Aeson
@@ -47,6 +49,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON WorkspaceSymbolClientCapabilities)
 
 instance Aeson.ToJSON WorkspaceSymbolClientCapabilities where
   toJSON (WorkspaceSymbolClientCapabilities arg0 arg1 arg2 arg3) = Aeson.object $ concat $  ["dynamicRegistration" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -31,6 +33,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON WorkspaceSymbolOptions)
 
 instance Aeson.ToJSON WorkspaceSymbolOptions where
   toJSON (WorkspaceSymbolOptions arg0 arg1) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -36,6 +38,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON WorkspaceSymbolParams)
 
 instance Aeson.ToJSON WorkspaceSymbolParams where
   toJSON (WorkspaceSymbolParams arg0 arg1 arg2) = Aeson.object $ concat $  ["workDoneToken" Language.LSP.Protocol.Types.Common..=? arg0
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
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -31,6 +33,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON WorkspaceSymbolRegistrationOptions)
 
 instance Aeson.ToJSON WorkspaceSymbolRegistrationOptions where
   toJSON (WorkspaceSymbolRegistrationOptions arg0 arg1) = Aeson.object $ concat $  ["workDoneProgress" Language.LSP.Protocol.Types.Common..=? arg0
diff --git a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceUnchangedDocumentDiagnosticReport.hs b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceUnchangedDocumentDiagnosticReport.hs
--- a/generated/Language/LSP/Protocol/Internal/Types/WorkspaceUnchangedDocumentDiagnosticReport.hs
+++ b/generated/Language/LSP/Protocol/Internal/Types/WorkspaceUnchangedDocumentDiagnosticReport.hs
@@ -8,6 +8,8 @@
 import Control.DeepSeq
 import Data.Hashable
 import GHC.Generics
+import Language.LSP.Protocol.Utils.Misc
+import Prettyprinter
 import qualified Data.Aeson as Aeson
 import qualified Data.Row.Aeson as Aeson
 import qualified Data.Row.Hashable as Hashable
@@ -46,6 +48,7 @@
   }
   deriving stock (Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON WorkspaceUnchangedDocumentDiagnosticReport)
 
 instance Aeson.ToJSON WorkspaceUnchangedDocumentDiagnosticReport where
   toJSON (WorkspaceUnchangedDocumentDiagnosticReport arg0 arg1 arg2 arg3) = Aeson.object $ concat $  [["kind" Aeson..= arg0]
diff --git a/generator/CodeGen.hs b/generator/CodeGen.hs
--- a/generator/CodeGen.hs
+++ b/generator/CodeGen.hs
@@ -305,10 +305,13 @@
   ensureImport "GHC.Generics" Unqual
   ensureImport "Control.DeepSeq" Unqual
   ensureImport "Data.Hashable" Unqual
+  ensureImport "Prettyprinter" Unqual
+  ensureImport "Language.LSP.Protocol.Utils.Misc" Unqual
   let derivDoc =
         let stockDeriv = "deriving stock" <+> tupled (fmap pretty toStockDerive)
             anyclassDeriv = "deriving anyclass" <+> tupled (fmap pretty toAnyclassDerive)
-        in indent indentSize $ hardvcat [stockDeriv, anyclassDeriv]
+            viaDeriv = "deriving" <+> "Pretty" <+> "via" <+> parens ("ViaJSON" <+> pretty tn)
+        in indent indentSize $ hardvcat [stockDeriv, anyclassDeriv, viaDeriv]
   dataDoc <- multilineHaddock . pretty <$> mkDocumentation documentation since proposed
   let dataDecl = "data" <+> pretty tn <+> "=" <+> pretty tn <+> nest indentSize (encloseSep (line <> "{ ") (line <> "}") ", " args)
       datad = hardvcat (deprecations ++ [dataDoc, dataDecl, derivDoc])
@@ -446,14 +449,17 @@
   ensureImport "GHC.Generics" Unqual
   ensureImport "Control.DeepSeq" Unqual
   ensureImport "Data.Hashable" Unqual
+  ensureImport "Prettyprinter" Unqual
+  ensureImport "Language.LSP.Protocol.Utils.Misc" Unqual
   dataDoc <- multilineHaddock . pretty <$> mkDocumentation documentation since proposed
   let derivDoc =
         let
           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)
-          viaDeriv = "deriving" <+> tupled toDeriveViaLspEnum <+> "via" <+> parens (asLspEnumN <+> pretty tn <+> ty)
-        in indent indentSize $ hardvcat [stockDeriv, anyclassDeriv, viaDeriv]
+          viaDeriv1 = "deriving" <+> tupled toDeriveViaLspEnum <+> "via" <+> parens (asLspEnumN <+> pretty tn <+> ty)
+          viaDeriv2 = "deriving" <+> "Pretty" <+> "via" <+> parens ("ViaJSON" <+> pretty tn)
+        in indent indentSize $ hardvcat [stockDeriv, anyclassDeriv, viaDeriv1, viaDeriv2]
   let dataDecl = "data" <+> pretty tn <+> "=" <+> nest indentSize (encloseSep (line <> "  ") mempty "| " cons)
       dataD = hardvcat (deprecations ++ [dataDoc, dataDecl, derivDoc])
 
@@ -525,6 +531,8 @@
   ensureImport "Data.Aeson" (QualAs "Aeson")
   ensureImport "Data.Row.Aeson" (QualAs "Aeson")
   ensureImport "Data.Row.Hashable" (QualAs "Hashable")
+  ensureImport "Prettyprinter" Unqual
+  ensureImport "Language.LSP.Protocol.Utils.Misc" Unqual
   -- In practice, it seems that only base types and aliases to base types get used as map keys, so deriving
   -- To/FromJSONKey for them seems to be enough
   let derivDoc =
@@ -532,7 +540,8 @@
             newtypeDeriv = "deriving newtype" <+> tupled aesonDeriving
             stockDeriv = "deriving stock" <+> tupled (fmap pretty toStockDerive)
             anyclassDeriv = "deriving anyclass" <+> tupled (fmap pretty toAnyclassDerive)
-        in indent indentSize $ hardvcat [newtypeDeriv, stockDeriv, anyclassDeriv]
+            viaDeriv = "deriving" <+> "Pretty" <+> "via" <+> parens ("ViaJSON" <+> pretty hsName)
+        in indent indentSize $ hardvcat [newtypeDeriv, stockDeriv, anyclassDeriv, viaDeriv]
   dataDoc <- multilineHaddock . pretty <$> mkDocumentation documentation since proposed
   let dataDecl = "newtype" <+> pretty hsName <+> "=" <+> pretty hsName <+> rhs
       datad = hardvcat (optDeprecated hsName deprecated ++ [dataDoc, dataDecl, derivDoc])
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.0.1.1
+version:            2.0.2.0
 synopsis:
   Haskell library for the Microsoft Language Server Protocol, data types
 
@@ -78,9 +78,13 @@
     , 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
     , safe
diff --git a/src/Language/LSP/Protocol/Message/LspId.hs b/src/Language/LSP/Protocol/Message/LspId.hs
--- a/src/Language/LSP/Protocol/Message/LspId.hs
+++ b/src/Language/LSP/Protocol/Message/LspId.hs
@@ -6,10 +6,12 @@
 import           Data.IxMap
 import           Data.Text                          (Text)
 import           GHC.Generics
+import           Prettyprinter
 
 import           Language.LSP.Protocol.Types.Common
 import           Language.LSP.Protocol.Internal.Method
 import           Language.LSP.Protocol.Message.Meta
+import           Language.LSP.Protocol.Utils.Misc
 
 -- | Id used for a request, Can be either a String or an Int
 data LspId (m :: Method f Request) = IdInt !Int32 | IdString !Text
@@ -23,6 +25,8 @@
   parseJSON v@(A.Number _) = IdInt <$> A.parseJSON v
   parseJSON  (A.String  s) = return (IdString s)
   parseJSON _              = fail "LspId"
+
+deriving via ViaJSON (LspId m) instance Pretty (LspId m)
 
 instance IxOrd LspId where
   type Base LspId = SomeLspId
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
@@ -24,6 +24,7 @@
 import           Language.LSP.Protocol.Internal.Method
 import           Language.LSP.Protocol.Message.Meta
 import           Language.LSP.Protocol.Utils.Misc
+import           Prettyprinter
 import           Unsafe.Coerce
 
 ---------------
@@ -49,6 +50,8 @@
     s <- parseJSON v
     pure $ methodStringToSomeMethod s
 
+deriving via ViaJSON SomeMethod instance Pretty SomeMethod
+
 ---------------
 -- SMethod
 ---------------
@@ -104,6 +107,8 @@
 -- instance FromJSON (SMethod Method_X)
 makeSingletonFromJSON 'SomeMethod ''SMethod ['SMethod_CustomMethod]
 
+deriving via ViaJSON (SMethod m) instance Pretty (SMethod m)
+
 ---------------
 -- Extras
 ---------------
@@ -142,6 +147,8 @@
 instance ToJSON SomeClientMethod where
   toJSON (SomeClientMethod sm) = toJSON $ someMethodToMethodString $ SomeMethod sm
 
+deriving via ViaJSON SomeClientMethod instance Pretty SomeClientMethod
+
 instance FromJSON SomeServerMethod where
   parseJSON v = do
     (SomeMethod sm) <- parseJSON v
@@ -151,6 +158,8 @@
 
 instance ToJSON SomeServerMethod where
   toJSON (SomeServerMethod sm) = toJSON $ someMethodToMethodString $ SomeMethod sm
+
+deriving via ViaJSON SomeServerMethod instance Pretty SomeServerMethod
 
 {- Note [Parsing methods that go both ways]
 
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
@@ -20,6 +20,7 @@
 import           Data.Text                         (Text)
 import qualified Data.Text                         as T
 import           GHC.Generics
+import           Prettyprinter
 
 -- | Typed registration type, with correct options.
 data TRegistration (m :: Method ClientToServer t) =
@@ -51,6 +52,8 @@
 instance ToJSON (TRegistration m) where
   toJSON x@(TRegistration _ m _) = regHelper m (genericToJSON lspOptions x)
 
+deriving via ViaJSON (TRegistration m) instance Pretty (TRegistration m)
+
 data SomeRegistration = forall t (m :: Method ClientToServer t). SomeRegistration (TRegistration m)
 
 instance ToJSON SomeRegistration where
@@ -65,6 +68,8 @@
 instance Show SomeRegistration where
   show (SomeRegistration r@(TRegistration _ m _)) = regHelper m (show r)
 
+deriving via ViaJSON SomeRegistration instance Pretty SomeRegistration
+
 toUntypedRegistration :: TRegistration m -> Registration
 toUntypedRegistration (TRegistration i meth opts) = Registration i (T.pack $ someMethodToMethodString $ SomeMethod meth) (Just $ regHelper meth (toJSON opts))
 
@@ -93,6 +98,8 @@
 instance ToJSON (TUnregistration m) where
   toJSON x@(TUnregistration _ m) = regHelper m (genericToJSON lspOptions x)
 
+deriving via ViaJSON (TUnregistration m) instance Pretty (TUnregistration m)
+
 data SomeUnregistration = forall t (m :: Method ClientToServer t). SomeUnregistration (TUnregistration m)
 
 instance ToJSON SomeUnregistration where
@@ -103,6 +110,8 @@
     SomeClientMethod m <- o .: "method"
     r <- TUnregistration <$> o .: "id" <*> pure m
     pure (SomeUnregistration r)
+
+deriving via ViaJSON SomeUnregistration instance Pretty SomeUnregistration
 
 toUntypedUnregistration :: TUnregistration m -> Unregistration
 toUntypedUnregistration (TUnregistration i meth) = Unregistration i (T.pack $ someMethodToMethodString $ SomeMethod meth)
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
@@ -23,6 +23,7 @@
 import           Data.Text                          (Text)
 import           GHC.Generics
 import           GHC.TypeLits                       (KnownSymbol)
+import           Prettyprinter
 
 -- 'RequestMessage', 'ResponseMessage', 'ResponseError', and 'NotificationMessage'
 -- aren't present in the metamodel, although they should be.
@@ -37,6 +38,7 @@
     } deriving stock (Show, Eq, Generic)
 
 deriveJSON lspOptions ''NotificationMessage
+deriving via ViaJSON NotificationMessage instance Pretty NotificationMessage
 
 -- This isn't present in the metamodel.
 -- | Request message type as defined in the spec.
@@ -48,6 +50,7 @@
     } deriving stock (Show, Eq, Generic)
 
 deriveJSON lspOptions ''RequestMessage
+deriving via ViaJSON RequestMessage instance Pretty RequestMessage
 
 -- | Response error type as defined in the spec.
 data ResponseError =
@@ -85,6 +88,8 @@
               x{_code = InR (fromOpenEnumBaseType n)}
             go x = x
 
+deriving via ViaJSON ResponseError instance Pretty ResponseError
+
 -- | Response message type as defined in the spec.
 data ResponseMessage =
   ResponseMessage
@@ -96,6 +101,8 @@
 
 deriveJSON lspOptions ''ResponseMessage
 
+deriving via ViaJSON ResponseMessage instance Pretty ResponseMessage
+
 -----
 -- | Typed notification message, containing the correct parameter payload.
 data TNotificationMessage (m :: Method f Notification) =
@@ -125,6 +132,8 @@
   toJSON     = genericToJSON lspOptions
   toEncoding = genericToEncoding lspOptions
 
+deriving via ViaJSON (TNotificationMessage m) instance (ToJSON (MessageParams m)) => Pretty (TNotificationMessage m)
+
 -- | Typed request message, containing the correct parameter payload.
 data TRequestMessage (m :: Method f Request) = TRequestMessage
     { _jsonrpc :: Text
@@ -143,6 +152,8 @@
   toJSON     = genericToJSON lspOptions
   toEncoding = genericToEncoding lspOptions
 
+deriving via ViaJSON (TRequestMessage m) instance (ToJSON (MessageParams m)) => Pretty (TRequestMessage m)
+
 data TResponseError (m :: Method f Request) =
   TResponseError
     { _code    :: LSPErrorCodes |? ErrorCodes
@@ -168,6 +179,8 @@
   toJSON     = genericToJSON lspOptions
   toEncoding = genericToEncoding lspOptions
 
+deriving via ViaJSON (TResponseError m) instance (ToJSON (ErrorData m)) => Pretty (TResponseError m)
+
 -- TODO: similar functions for the others?
 toUntypedResponseError :: (ToJSON (ErrorData m)) => TResponseError m -> ResponseError
 toUntypedResponseError (TResponseError c m d) = ResponseError c m (fmap toJSON d)
@@ -208,6 +221,8 @@
       (Nothing, Nothing) -> fail "both error and result cannot be Nothing"
     return $ TResponseMessage _jsonrpc _id result
 
+deriving via ViaJSON (TResponseMessage m) instance (ToJSON (MessageResult m), ToJSON (ErrorData m)) => Pretty (TResponseMessage m)
+
 -- | A typed custom message. A special data type is needed to distinguish between
 -- notifications and requests, since a CustomMethod can be both!
 data TCustomMessage s f t where
@@ -225,6 +240,7 @@
 instance KnownSymbol s => FromJSON (TCustomMessage s f Notification) where
   parseJSON v = NotMess <$> parseJSON v
 
+deriving via ViaJSON (TCustomMessage s f t) instance (KnownSymbol s) => Pretty (TCustomMessage s f t)
 
 -- ---------------------------------------------------------------------
 -- Helper Type Families
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
@@ -37,9 +37,11 @@
 import           Data.String         (fromString)
 import           Data.Int            (Int32)
 import           Data.Mod.Word
+import           Language.LSP.Protocol.Utils.Misc
 import           GHC.Generics        hiding (UInt)
 import           GHC.TypeNats        hiding (Mod)
 import           Text.Read           (Read (readPrec))
+import           Prettyprinter
 
 -- | The "uinteger" type in the LSP spec.
 --
@@ -57,6 +59,9 @@
 instance Read UInt where
   readPrec = fromInteger <$> readPrec
 
+instance Pretty UInt where
+  pretty = viaShow
+
 instance Real UInt where
   toRational (UInt u) = toRational $ unMod u
 
@@ -78,6 +83,7 @@
             | InR b
   deriving stock (Read, Show, Eq, Ord, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON (a |? b))
 infixr |?
 
 -- | Prism for the left-hand side of an '(|?)'.
@@ -139,6 +145,7 @@
 data Null = Null
   deriving stock (Eq, Ord, Show, Generic)
   deriving anyclass (NFData, Hashable)
+  deriving Pretty via (ViaJSON Null)
 
 instance ToJSON Null where
   toJSON Null = J.Null
diff --git a/src/Language/LSP/Protocol/Types/Singletons.hs b/src/Language/LSP/Protocol/Types/Singletons.hs
--- a/src/Language/LSP/Protocol/Types/Singletons.hs
+++ b/src/Language/LSP/Protocol/Types/Singletons.hs
@@ -7,6 +7,7 @@
 import           Control.DeepSeq
 import           GHC.TypeLits (KnownNat, KnownSymbol, Nat, Symbol, natVal,
                                symbolVal)
+import           Prettyprinter
 
 -- | A type whose only inhabitant is a single, statically-known string.
 --
@@ -17,6 +18,8 @@
 
 instance Show (AString s) where
   show AString = symbolVal (Proxy @s)
+instance Pretty (AString s) where
+  pretty = viaShow
 instance Eq (AString s) where
   _ == _ = True
 instance Ord (AString s) where
@@ -45,6 +48,8 @@
 
 instance Show (AnInteger n) where
   show AnInteger = show $ natVal (Proxy @n)
+instance Pretty (AnInteger n) where
+  pretty = viaShow
 instance Eq (AnInteger n) where
   _ == _ = True
 instance Ord (AnInteger n) 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
@@ -40,11 +40,12 @@
 import qualified System.FilePath.Posix   as FPP
 import qualified System.FilePath.Windows as FPW
 import qualified System.Info
+import           Prettyprinter
 
 -- | The @Uri@ type in the LSP specification.
 newtype Uri = Uri { getUri :: Text }
   deriving stock (Eq,Ord,Read,Show,Generic)
-  deriving newtype (A.FromJSON,A.ToJSON,Hashable,A.ToJSONKey,A.FromJSONKey)
+  deriving newtype (A.FromJSON,A.ToJSON,Hashable,A.ToJSONKey,A.FromJSONKey, Pretty)
 
 instance NFData Uri
 
@@ -66,6 +67,9 @@
 instance Hashable NormalizedUri where
   hash (NormalizedUri h _) = h
   hashWithSalt salt (NormalizedUri h _) = hashWithSalt salt h
+
+instance Pretty NormalizedUri where
+  pretty (NormalizedUri _ t) = pretty t
 
 instance NFData NormalizedUri
 
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
@@ -7,13 +7,20 @@
   , makeRegHelper
   , lspOptions
   , lspOptionsUntagged
+  , prettyJSON
+  , ViaJSON (..)
   ) where
 
 import           Control.Monad
-import           Data.Aeson
-import           Data.List
+import           Data.Aeson    
+import           Data.Aeson.Text     as Aeson
+import qualified Data.Foldable       as F
+import qualified Data.Foldable.WithIndex as F
+import qualified Data.Functor.WithIndex.Instances ()
+import           Data.List           hiding (group)
 import           Data.Maybe          (mapMaybe)
 import           Language.Haskell.TH
+import           Prettyprinter
 
 -- ---------------------------------------------------------------------
 
@@ -98,3 +105,21 @@
 -- | Standard options for use when generating JSON instances for an untagged union
 lspOptionsUntagged :: Options
 lspOptionsUntagged = lspOptions { sumEncoding = UntaggedValue }
+
+prettyJSON :: Value -> Doc ann
+prettyJSON = \case
+  Array vec ->
+    let docs = fmap prettyJSON (F.toList vec)
+        separator = ","
+    in group $ nest 2 ("[" <> line <> vsep (punctuate separator docs)) <> line <> "]"
+  Object km ->
+    let docs = fmap (\(k, v) -> pretty (show k) <> ":" <+> prettyJSON v) (F.itoList km)
+        separator = ","
+    in group $ nest 2 ("{" <> line <> vsep (punctuate separator docs)) <> line <> "}"
+  -- for atomic objects, piggyback off aeson's encoding
+  v -> pretty $ Aeson.encodeToLazyText v
+
+newtype ViaJSON a = ViaJSON a
+
+instance ToJSON a => Pretty (ViaJSON a) where
+  pretty (ViaJSON a) = prettyJSON $ toJSON a
