From 9ff540777f143dfb29f6f66cef564453115d4183 Mon Sep 17 00:00:00 2001
From: Jens Nolte <git@queezle.net>
Date: Sat, 9 Apr 2022 01:19:59 +0200
Subject: [PATCH] Update to GHC 9.2.2

Co-authored-by: Jan Beinke <git@janbeinke.com>
---
 flake.lock                               | 30 +++++++++--------
 flake.nix                                | 16 +++++----
 quasar-network.cabal                     | 42 +++---------------------
 src/Quasar/Network/Multiplexer.hs        |  2 +-
 src/Quasar/Network/Runtime/Observable.hs |  2 +-
 src/Quasar/Network/TH.hs                 |  9 +++--
 test/Quasar/NetworkSpec.hs               |  1 +
 7 files changed, 37 insertions(+), 65 deletions(-)

diff --git a/flake.lock b/flake.lock
index d7a23bb..12afa7c 100644
--- a/flake.lock
+++ b/flake.lock
@@ -2,30 +2,34 @@
   "nodes": {
     "nixpkgs": {
       "locked": {
-        "lastModified": 1645334861,
-        "narHash": "sha256-We9ECiMglthzbZ5S6Myqqf+RHzBFZPoM2qL5/jDkUjs=",
+        "lastModified": 1649225869,
+        "narHash": "sha256-u1zLtPmQzhT9mNXyM8Ey9pk7orDrIKdwooeGDEXm5xM=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "d5f237872975e6fb6f76eef1368b5634ffcd266f",
+        "rev": "b6966d911da89e5a7301aaef8b4f0a44c77e103c",
         "type": "github"
       },
       "original": {
-        "id": "nixpkgs",
-        "type": "indirect"
+        "owner": "NixOS",
+        "ref": "nixos-unstable",
+        "repo": "nixpkgs",
+        "type": "github"
       }
     },
     "nixpkgs_2": {
       "locked": {
-        "lastModified": 1645334861,
-        "narHash": "sha256-We9ECiMglthzbZ5S6Myqqf+RHzBFZPoM2qL5/jDkUjs=",
+        "lastModified": 1649225869,
+        "narHash": "sha256-u1zLtPmQzhT9mNXyM8Ey9pk7orDrIKdwooeGDEXm5xM=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "d5f237872975e6fb6f76eef1368b5634ffcd266f",
+        "rev": "b6966d911da89e5a7301aaef8b4f0a44c77e103c",
         "type": "github"
       },
       "original": {
-        "id": "nixpkgs",
-        "type": "indirect"
+        "owner": "NixOS",
+        "ref": "nixos-unstable",
+        "repo": "nixpkgs",
+        "type": "github"
       }
     },
     "quasar": {
@@ -34,11 +38,11 @@
       },
       "locked": {
         "host": "git.c3pb.de",
-        "lastModified": 1649186839,
-        "narHash": "sha256-hYmuv40Wy302gWHvsEb8FGmMX1fxZlpq77SLE7UxQJQ=",
+        "lastModified": 1649454868,
+        "narHash": "sha256-64pCVdiy9hHR71I1d0w3tOVTs3y8tmmkbn/B2KNaHoM=",
         "owner": "jens",
         "repo": "quasar",
-        "rev": "82ebde4fe07002ba7c7a4d5bb4e21d63f30d4eef",
+        "rev": "c23144b3d2b64446575c2cecabbba11e0813c626",
         "type": "gitlab"
       },
       "original": {
diff --git a/flake.nix b/flake.nix
index 74b50d0..858acaa 100644
--- a/flake.nix
+++ b/flake.nix
@@ -1,5 +1,6 @@
 {
   inputs = {
+    nixpkgs.url = github:NixOS/nixpkgs/nixos-unstable;
     quasar = {
       url = gitlab:jens/quasar?host=git.c3pb.de;
     };
@@ -16,21 +17,22 @@
         self.overlay
         quasar.overlay
       ]; };
-      in { inherit (pkgs.haskellPackages) quasar-network; }
+      in rec {
+        default = quasar-network;
+        quasar-network = pkgs.haskell.packages.ghc922.quasar-network;
+      }
     );
 
-    overlay = self: super: {
-      haskell = super.haskell // {
-        packageOverrides = hself: hsuper: super.haskell.packageOverrides hself hsuper // {
-          quasar-network = import ./. { pkgs = self; haskellPackages = hself; };
+    overlay = final: prev: {
+      haskell = prev.haskell // {
+        packageOverrides = hfinal: hprev: prev.haskell.packageOverrides hfinal hprev // {
+          quasar-network = import ./. { pkgs = final; haskellPackages = hfinal; };
         };
       };
     };
 
     overlays.quasar = quasar.overlay;
 
-    defaultPackage = forAllSystems (system: self.packages.${system}.quasar-network);
-
     devShell = forAllSystems (system:
       let
         pkgs = nixpkgs.legacyPackages.${system};
diff --git a/quasar-network.cabal b/quasar-network.cabal
index d40329c..c3d2e1d 100644
--- a/quasar-network.cabal
+++ b/quasar-network.cabal
@@ -20,54 +20,28 @@ source-repository head
 common shared-properties
   default-extensions:
     AllowAmbiguousTypes
-    BangPatterns
     BlockArguments
-    ConstraintKinds
     DataKinds
     DefaultSignatures
     DeriveAnyClass
-    DeriveGeneric
     DerivingStrategies
     DuplicateRecordFields
-    ExistentialQuantification
-    FlexibleContexts
-    FlexibleInstances
     FunctionalDependencies
     GADTs
-    GeneralizedNewtypeDeriving
-    ImportQualifiedPost
-    InstanceSigs
     LambdaCase
-    MultiParamTypeClasses
-    NamedFieldPuns
+    LexicalNegation
     NoImplicitPrelude
+    OverloadedRecordDot
     OverloadedStrings
-    PolyKinds
-    RankNTypes
-    ScopedTypeVariables
-    StandaloneDeriving
     TemplateHaskell
-    TupleSections
-    TypeApplications
     TypeFamilies
-    TypeOperators
     ViewPatterns
-    -- Required for the record-dot-preprocessor plugin
-    DuplicateRecordFields
-    TypeApplications
-    FlexibleContexts
-    DataKinds
-    MultiParamTypeClasses
-    TypeSynonymInstances
-    FlexibleInstances
-    UndecidableInstances
-    GADTs
-  default-language: Haskell2010
+  default-language: GHC2021
   ghc-options:
-    -fplugin=RecordDotPreprocessor
     -Weverything
     -Wno-all-missed-specialisations
     -Wno-missing-safe-haskell-mode
+    -Wno-missing-kind-signatures
     -Wno-missing-import-lists
     -Wno-unsafe
     -Werror=incomplete-patterns
@@ -97,18 +71,13 @@ library
     async,
     binary,
     bytestring,
-    deepseq,
     exceptions,
     mtl,
     network,
     quasar,
-    stm,
     template-haskell,
     unix,
     unordered-containers,
-    -- required for record-dot-preprocessor
-    record-dot-preprocessor,
-    record-hasfield,
   hs-source-dirs:
     src
 
@@ -129,9 +98,6 @@ test-suite quasar-network-test
     quasar,
     quasar-network,
     stm,
-    -- required for record-dot-preprocessor
-    record-dot-preprocessor,
-    record-hasfield,
   main-is: Spec.hs
   other-modules:
     Quasar.NetworkSpec
diff --git a/src/Quasar/Network/Multiplexer.hs b/src/Quasar/Network/Multiplexer.hs
index 692457d..c8190df 100644
--- a/src/Quasar/Network/Multiplexer.hs
+++ b/src/Quasar/Network/Multiplexer.hs
@@ -1,6 +1,6 @@
 module Quasar.Network.Multiplexer (
   -- * Channel type
-  Channel,
+  Channel(quasar),
 
   -- * Sending and receiving messages
   MessageId,
diff --git a/src/Quasar/Network/Runtime/Observable.hs b/src/Quasar/Network/Runtime/Observable.hs
index cce2d3a..e61f657 100644
--- a/src/Quasar/Network/Runtime/Observable.hs
+++ b/src/Quasar/Network/Runtime/Observable.hs
@@ -40,7 +40,7 @@ data ObservableClient a =
   }
 
 instance IsRetrievable a (ObservableClient a) where
-  -- TODO use withResourceScope to abort on async exception (once supported by the code generator)
+  -- TODO use withResourceScope to abort on async exception (once aborting requests is supported by the code generator)
   retrieve client = liftIO $ client.beginRetrieve >>= await
 
 instance IsObservable a (ObservableClient a) where
diff --git a/src/Quasar/Network/TH.hs b/src/Quasar/Network/TH.hs
index 692638e..9249971 100644
--- a/src/Quasar/Network/TH.hs
+++ b/src/Quasar/Network/TH.hs
@@ -14,15 +14,14 @@ module Quasar.Network.TH (
   makeRpc,
   -- TODO: re-add functions that generate only client and server later
   RpcProtocol(ProtocolRequest, ProtocolResponse),
-  HasProtocolImpl
+  HasProtocolImpl,
 ) where
 
 import Control.Monad.State (State, execState)
 import Control.Monad.State qualified as State
 import Data.Binary (Binary)
-import GHC.Records.Compat (HasField)
-import Language.Haskell.TH hiding (interruptible)
-import Language.Haskell.TH.Syntax
+import GHC.Records (HasField)
+import Language.Haskell.TH hiding (Code, interruptible)
 import Quasar
 import Quasar.Network.Multiplexer
 import Quasar.Network.Runtime
@@ -212,7 +211,7 @@ clientRequestStub api req = do
         requestDataE :: Q Exp
         requestDataE = applyVars (conE (requestConName api req))
         messageConfigurationE :: Q Exp
-        messageConfigurationE = [|defaultMessageConfiguration{createChannels = $(litE $ integerL $ toInteger $ numPipelinedChannels req)}|]
+        messageConfigurationE = [|MessageConfiguration False $(litE $ integerL $ toInteger $ numPipelinedChannels req)|]
         sendE :: Q Exp -> Q Exp
         sendE msgExp = [|$typedSend $clientE $messageConfigurationE $msgExp|]
         requestE :: Response -> Q Exp -> Q Exp
diff --git a/test/Quasar/NetworkSpec.hs b/test/Quasar/NetworkSpec.hs
index b448a79..c6ae81f 100644
--- a/test/Quasar/NetworkSpec.hs
+++ b/test/Quasar/NetworkSpec.hs
@@ -16,6 +16,7 @@ import Quasar
 import Quasar.Network
 import Quasar.Network.Runtime (withStandaloneClient)
 import Quasar.Network.TH (makeRpc)
+import Quasar.Network.Multiplexer
 import Quasar.Prelude
 import Test.Hspec.Core.Spec
 import Test.Hspec.Expectations.Lifted
-- 
GitLab