From ba2d4d359cdbf2ada43914a35e5091f45f387f41 Mon Sep 17 00:00:00 2001
From: Jens Nolte <git@queezle.net>
Date: Tue, 7 Dec 2021 15:53:24 +0100
Subject: [PATCH] Switch to GHC 9.2.1 to use native OverloadedRecordDot

GHC 9.2.1 also enables Template Haskell to attach Haddock documentation,
which can be used to attach documentation from the Wayland XML
specifications to their generated Haskell APIs.
---
 default.nix                         |  3 ++-
 flake.lock                          |  6 +++---
 quasar-wayland.cabal                | 24 +++---------------------
 src/Quasar/Wayland/Protocol/Core.hs |  3 ++-
 4 files changed, 10 insertions(+), 26 deletions(-)

diff --git a/default.nix b/default.nix
index 1dfac40..82a6921 100644
--- a/default.nix
+++ b/default.nix
@@ -1,7 +1,8 @@
 { pkgs ? import <nixpkgs> {}, haskellPackages ? pkgs.haskellPackages, args ? {} }:
 
 let
-  quasar-wayland = haskellPackages.callCabal2nix "quasar-wayland" ./. args;
+  #quasar-wayland = haskellPackages.callCabal2nix "quasar-wayland" ./. args;
+  quasar-wayland = pkgs.haskell.packages.ghc921.callCabal2nix "quasar-wayland" ./. args;
 
 in
   if pkgs.lib.inNixShell then quasar-wayland.env else quasar-wayland
diff --git a/flake.lock b/flake.lock
index 599e5db..d7a8003 100644
--- a/flake.lock
+++ b/flake.lock
@@ -2,11 +2,11 @@
   "nodes": {
     "nixpkgs": {
       "locked": {
-        "lastModified": 1635403963,
-        "narHash": "sha256-0actzfzBAXvvDJ/EvPSGbtCPXUwSObQrcq0RpsPWZgA=",
+        "lastModified": 1638110343,
+        "narHash": "sha256-hQaow8sGPyUrXgrqgDRsfA+73uR0vms2goTQNxIAaRQ=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "2deb07f3ac4eeb5de1c12c4ba2911a2eb1f6ed61",
+        "rev": "942eb9a335b4cd22fa6a7be31c494e53e76f5637",
         "type": "github"
       },
       "original": {
diff --git a/quasar-wayland.cabal b/quasar-wayland.cabal
index 2acb8c1..1c5bdc3 100644
--- a/quasar-wayland.cabal
+++ b/quasar-wayland.cabal
@@ -41,6 +41,7 @@ common shared-properties
     MultiParamTypeClasses
     NamedFieldPuns
     NoImplicitPrelude
+    OverloadedRecordDot
     OverloadedStrings
     PolyKinds
     RankNTypes
@@ -52,23 +53,13 @@ common shared-properties
     TypeFamilies
     TypeOperators
     ViewPatterns
-    -- Required for the record-dot-preprocessor plugin
-    DuplicateRecordFields
-    TypeApplications
-    FlexibleContexts
-    DataKinds
-    MultiParamTypeClasses
-    TypeSynonymInstances
-    FlexibleInstances
-    UndecidableInstances
-    GADTs
   default-language: Haskell2010
   ghc-options:
-    -fplugin=RecordDotPreprocessor
     -Weverything
     -Wno-all-missed-specialisations
-    -Wno-missing-safe-haskell-mode
     -Wno-missing-import-lists
+    -Wno-missing-kind-signatures
+    -Wno-missing-safe-haskell-mode
     -Wno-unsafe
     -Werror=incomplete-patterns
     -Werror=missing-fields
@@ -107,9 +98,6 @@ library
     utf8-string,
     stm,
     xml,
-    -- required for record-dot-preprocessor
-    record-dot-preprocessor,
-    record-hasfield,
   hs-source-dirs:
     src
 
@@ -118,9 +106,6 @@ executable quasar-wayland-example
   build-depends:
     quasar,
     quasar-wayland,
-    -- required for record-dot-preprocessor
-    record-dot-preprocessor,
-    record-hasfield,
   main-is: Main.hs
   hs-source-dirs:
     example
@@ -133,9 +118,6 @@ test-suite quasar-wayland-test
     --QuickCheck,
     hspec,
     --quasar-wayland,
-    -- required for record-dot-preprocessor
-    record-dot-preprocessor,
-    record-hasfield,
   main-is: Spec.hs
   other-modules:
     --Quasar.TemplateSpec
diff --git a/src/Quasar/Wayland/Protocol/Core.hs b/src/Quasar/Wayland/Protocol/Core.hs
index 8668bee..e4cff7c 100644
--- a/src/Quasar/Wayland/Protocol/Core.hs
+++ b/src/Quasar/Wayland/Protocol/Core.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE DeriveLift #-}
+{-# LANGUAGE UndecidableInstances #-}
 
 module Quasar.Wayland.Protocol.Core (
   ObjectId,
@@ -600,7 +601,7 @@ sendMessage object message = do
       putWord32host $ (fromIntegral msgSize `shiftL` 16) .|. fromIntegral opcode
 
 objectSendMessage :: forall s i. IsInterfaceSide s i => Object s i -> WireUp s i -> STM ()
-objectSendMessage object message = runProtocolM (objectProtocol object) $ sendMessage object message
+objectSendMessage object message = runProtocolM object.objectProtocol $ sendMessage object message
 
 
 receiveMessages :: IsSide s => ProtocolM s ()
-- 
GitLab