From 12acbd78a4773345686698186fe358110517b3cb Mon Sep 17 00:00:00 2001
From: Ruben Astudillo <ruben.astud@gmail.com>
Date: Mon, 1 Aug 2022 11:40:16 -0400
Subject: [PATCH] Update to new version of hs-web3 and GHC 9.2.4

---
 default.nix            | 10 ++++++++
 flake.lock             | 58 ++++++++++++++++++++++++++++++++++++++++++
 flake.nix              | 48 ++++++++++++++++++++++++++++++++++
 package.yaml           |  2 +-
 pixura-contracts.cabal | 41 ++++++++++++++++++++++++++---
 shell.nix              | 29 +++++++++++++++++++++
 stack.yaml             | 22 +++++++++++++---
 stack.yaml.lock        |  9 ++++---
 8 files changed, 208 insertions(+), 11 deletions(-)
 create mode 100644 default.nix
 create mode 100644 flake.lock
 create mode 100644 flake.nix
 create mode 100644 shell.nix

diff --git a/default.nix b/default.nix
new file mode 100644
index 0000000..669937e
--- /dev/null
+++ b/default.nix
@@ -0,0 +1,10 @@
+{ mkDerivation, base, generics-sop, lib, zlib, web3-ethereum }:
+mkDerivation {
+  pname = "pixura-contracts";
+  version = "0.3.0.0";
+  src = ./.;
+  libraryHaskellDepends = [ base generics-sop web3-ethereum ];
+  libraryPkgconfigDepends = [ zlib ];
+  homepage = "https://github.com/Pixura/pixura-contracts#readme";
+  license = lib.licenses.bsd3;
+}
diff --git a/flake.lock b/flake.lock
new file mode 100644
index 0000000..b7c9b7e
--- /dev/null
+++ b/flake.lock
@@ -0,0 +1,58 @@
+{
+  "nodes": {
+    "hs-web3": {
+      "inputs": {
+        "nixpkgs": "nixpkgs"
+      },
+      "locked": {
+        "lastModified": 1661984067,
+        "narHash": "sha256-j+BzdnBFjS8qKjAqATzMi7/bxW8jX0/eh4Rv+yHstO8=",
+        "ref": "master",
+        "rev": "8f7459b834f7f42e5570e0004fe1fc6d4f7c6c9a",
+        "revCount": 631,
+        "type": "git",
+        "url": "ssh://git@github.com/superrare/hs-web3"
+      },
+      "original": {
+        "id": "hs-web3",
+        "type": "indirect"
+      }
+    },
+    "nixpkgs": {
+      "locked": {
+        "lastModified": 1661353537,
+        "narHash": "sha256-1E2IGPajOsrkR49mM5h55OtYnU0dGyre6gl60NXKITE=",
+        "owner": "NixOS",
+        "repo": "nixpkgs",
+        "rev": "0e304ff0d9db453a4b230e9386418fd974d5804a",
+        "type": "github"
+      },
+      "original": {
+        "id": "nixpkgs",
+        "type": "indirect"
+      }
+    },
+    "nixpkgs_2": {
+      "locked": {
+        "lastModified": 1661353537,
+        "narHash": "sha256-1E2IGPajOsrkR49mM5h55OtYnU0dGyre6gl60NXKITE=",
+        "owner": "NixOS",
+        "repo": "nixpkgs",
+        "rev": "0e304ff0d9db453a4b230e9386418fd974d5804a",
+        "type": "github"
+      },
+      "original": {
+        "id": "nixpkgs",
+        "type": "indirect"
+      }
+    },
+    "root": {
+      "inputs": {
+        "hs-web3": "hs-web3",
+        "nixpkgs": "nixpkgs_2"
+      }
+    }
+  },
+  "root": "root",
+  "version": 7
+}
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 0000000..d18eeac
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,48 @@
+{
+  # inspired by: https://serokell.io/blog/practical-nix-flakes#packaging-existing-applications
+  description = "A Hello World in Haskell with a dependency and a devShell";
+  inputs =
+    {
+      nixpkgs.url = "nixpkgs";
+      hs-web3 =
+        { url = "hs-web3";
+          inputs.nixpkgs.url = "nixpkgs";
+        };
+    };
+  outputs = { self, nixpkgs, hs-web3 }:
+    let
+      supportedSystems = [ "x86_64-linux" "x86_64-darwin" ];
+      forAllSystems = f: nixpkgs.lib.genAttrs supportedSystems (system: f system);
+      nixpkgsFor = forAllSystems (system: import nixpkgs {
+        inherit system;
+        overlays = [ (self.overlay system) ];
+      });
+    in
+    {
+      overlay = (system: final: prev: {
+        pixura-contracts = final.haskell.packages.ghc924.callPackage (import ./default.nix) {
+          inherit (final) zlib;
+          inherit (hs-web3.packages.${system}) web3-ethereum;
+        };
+      });
+      packages = forAllSystems (system: {
+         pixura-contracts = nixpkgsFor.${system}.pixura-contracts;
+      });
+      defaultPackage = forAllSystems (system: self.packages.${system}.pixura-contracts);
+      checks = self.packages;
+      devShell = forAllSystems (system:
+        let haskellPackages = nixpkgsFor.${system}.haskell.packages.ghc924;
+        in haskellPackages.shellFor
+          {
+           packages = p: [self.packages.${system}.pixura-contracts];
+           withHoogle = true;
+           buildInputs = with haskellPackages;
+             [
+              haskell-language-server
+              cabal-install
+              ];
+           # Change the prompt to show that you are in a devShell
+           # shellHook = "export PS1='\\e[1;34mdev > \\e[0m'";
+           });
+    };
+}
diff --git a/package.yaml b/package.yaml
index 4dd7521..4ca67aa 100644
--- a/package.yaml
+++ b/package.yaml
@@ -48,7 +48,7 @@ default-extensions:
 dependencies:
   - base >=4.7 && <5
   - generics-sop
-  - web3
+  - web3-ethereum
 library:
   source-dirs: hs-contracts/src
   ghc-options: -Wall -Werror
diff --git a/pixura-contracts.cabal b/pixura-contracts.cabal
index 8d09f49..f3073e0 100644
--- a/pixura-contracts.cabal
+++ b/pixura-contracts.cabal
@@ -1,6 +1,6 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.33.0.
+-- This file has been generated from package.yaml by hpack version 0.34.7.
 --
 -- see: https://github.com/sol/hpack
 --
@@ -57,10 +57,45 @@ library
       Paths_pixura_contracts
   hs-source-dirs:
       hs-contracts/src
-  default-extensions: ApplicativeDo BangPatterns ConstraintKinds DataKinds DefaultSignatures DeriveFoldable DeriveFunctor DeriveGeneric DeriveLift DeriveTraversable DerivingStrategies EmptyCase ExistentialQuantification FlexibleContexts FlexibleInstances FunctionalDependencies GADTs GeneralizedNewtypeDeriving InstanceSigs KindSignatures LambdaCase MultiParamTypeClasses MultiWayIf NamedFieldPuns OverloadedStrings PatternSynonyms RankNTypes RecordWildCards ScopedTypeVariables StandaloneDeriving TupleSections TypeApplications TypeFamilies TypeFamilyDependencies TypeOperators
+  default-extensions:
+      ApplicativeDo
+      BangPatterns
+      ConstraintKinds
+      DataKinds
+      DefaultSignatures
+      DeriveFoldable
+      DeriveFunctor
+      DeriveGeneric
+      DeriveLift
+      DeriveTraversable
+      DerivingStrategies
+      EmptyCase
+      ExistentialQuantification
+      FlexibleContexts
+      FlexibleInstances
+      FunctionalDependencies
+      GADTs
+      GeneralizedNewtypeDeriving
+      InstanceSigs
+      KindSignatures
+      LambdaCase
+      MultiParamTypeClasses
+      MultiWayIf
+      NamedFieldPuns
+      OverloadedStrings
+      PatternSynonyms
+      RankNTypes
+      RecordWildCards
+      ScopedTypeVariables
+      StandaloneDeriving
+      TupleSections
+      TypeApplications
+      TypeFamilies
+      TypeFamilyDependencies
+      TypeOperators
   ghc-options: -Wall -Werror
   build-depends:
       base >=4.7 && <5
     , generics-sop
-    , web3
+    , web3-ethereum
   default-language: Haskell2010
diff --git a/shell.nix b/shell.nix
new file mode 100644
index 0000000..8fcebbd
--- /dev/null
+++ b/shell.nix
@@ -0,0 +1,29 @@
+{ nixpkgs ? import <nixpkgs> {}, compiler ? "default", doBenchmark ? false }:
+
+let
+
+  inherit (nixpkgs) pkgs;
+
+  f = { mkDerivation, base, generics-sop, hpack, lib, web3 }:
+      mkDerivation {
+        pname = "pixura-contracts";
+        version = "0.3.0.0";
+        src = ./.;
+        libraryHaskellDepends = [ base generics-sop ];
+        libraryToolDepends = [ hpack ];
+        prePatch = "hpack";
+        homepage = "https://github.com/Pixura/pixura-contracts#readme";
+        license = lib.licenses.bsd3;
+      };
+
+  haskellPackages = if compiler == "default"
+                       then pkgs.haskellPackages
+                       else pkgs.haskell.packages.${compiler};
+
+  variant = if doBenchmark then pkgs.haskell.lib.doBenchmark else pkgs.lib.id;
+
+  drv = variant (haskellPackages.callPackage f {});
+
+in
+
+  if pkgs.lib.inNixShell then drv.env else drv
diff --git a/stack.yaml b/stack.yaml
index 91938f6..7f8f8ae 100644
--- a/stack.yaml
+++ b/stack.yaml
@@ -1,8 +1,24 @@
-resolver: lts-14.6
+resolver:
+  url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2022/7/28.yaml
 
 packages:
   - "."
 
+allow-newer: true
+
 extra-deps:
-  - git: https://github.com/Pixura/hs-web3
-    commit: 175ca55de9be31054a8246d8c5ed8d7ce7813d83
+  - git: https://github.com/superrare/hs-web3
+    commit: ac45f1fe34c2290739dcb7603a075c55385c2a51
+    subdirs:
+      - packages/bignum
+      - packages/crypto
+      - packages/ethereum
+      - packages/hexstring
+      - packages/ipfs
+      - packages/jsonrpc
+      - packages/polkadot
+      - packages/provider
+      - packages/scale
+      - packages/solidity
+      - packages/web3
+  - relapse-1.0.0.0@sha256:b89ea23189e07f377be4e2a4deccf3d6ba7f547ed8ad77e27b35d78801efd81c
diff --git a/stack.yaml.lock b/stack.yaml.lock
index f58f4b5..f5dd099 100644
--- a/stack.yaml.lock
+++ b/stack.yaml.lock
@@ -17,7 +17,8 @@ packages:
     commit: 175ca55de9be31054a8246d8c5ed8d7ce7813d83
 snapshots:
 - completed:
-    size: 524127
-    url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/14/6.yaml
-    sha256: dc70dfb45e2c32f54719819bd055f46855dd4b3bd2e58b9f3f38729a2d553fbb
-  original: lts-14.6
+    sha256: 83cd17c52003e19611bd84c678f78fb0d98828ab8bc300a0b53ff2ae4f894ac5
+    size: 617444
+    url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2022/7/28.yaml
+  original:
+    url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2022/7/28.yaml