diff --git a/agora.cabal b/agora.cabal index 11dc271..b50a55b 100644 --- a/agora.cabal +++ b/agora.cabal @@ -95,6 +95,7 @@ common deps , data-default-class , generics-sop , plutarch + , plutarch-extra , plutus-core , plutus-ledger-api , plutus-tx @@ -128,8 +129,6 @@ library other-modules: Agora.Utils Agora.Utils.Value - Plutarch.Api.V1.These - Plutarch.These hs-source-dirs: agora diff --git a/agora/Agora/AuthorityToken.hs b/agora/Agora/AuthorityToken.hs index 3a00148..4050348 100644 --- a/agora/Agora/AuthorityToken.hs +++ b/agora/Agora/AuthorityToken.hs @@ -15,14 +15,14 @@ import Plutarch.Api.V1 ( PAddress (..), PCredential (..), PCurrencySymbol (..), - PMap (..), PScriptContext (..), PScriptPurpose (..), PTxInInfo (..), PTxInfo (..), PTxOut (..), - PValue (..), ) +import Plutarch.Api.V1.AssocMap (PMap (PMap)) +import Plutarch.Api.V1.Value (PValue (PValue)) import Plutarch.Builtin (pforgetData) import Plutarch.List (pfoldr') import Plutarch.Monadic qualified as P diff --git a/agora/Agora/Utils.hs b/agora/Agora/Utils.hs index 4b599c8..9c5224a 100644 --- a/agora/Agora/Utils.hs +++ b/agora/Agora/Utils.hs @@ -44,7 +44,6 @@ import Plutarch.Api.V1 ( PCurrencySymbol, PDatum, PDatumHash, - PMap (PMap), PMaybeData (PDJust), PPubKeyHash, PTokenName, @@ -53,8 +52,9 @@ import Plutarch.Api.V1 ( PTxInfo (PTxInfo), PTxOut (PTxOut), PTxOutRef, - PValue (PValue), ) +import Plutarch.Api.V1.AssocMap (PMap (PMap)) +import Plutarch.Api.V1.Value (PValue (PValue)) import Plutarch.Builtin (ppairDataBuiltin) import Plutarch.Internal (punsafeCoerce) import Plutarch.Monadic qualified as P diff --git a/agora/Plutarch/Api/V1/These.hs b/agora/Plutarch/Api/V1/These.hs deleted file mode 100644 index e1ae1ed..0000000 --- a/agora/Plutarch/Api/V1/These.hs +++ /dev/null @@ -1,62 +0,0 @@ -{-# OPTIONS_GHC -Wno-orphans #-} - -module Plutarch.Api.V1.These (PTheseData (..)) where - -import GHC.Generics qualified as GHC -import Generics.SOP -import Plutarch.DataRepr (PIsDataReprInstances (PIsDataReprInstances)) -import Plutarch.Lift ( - PConstantRepr, - PConstanted, - PLifted, - PUnsafeLiftDecl, - pconstantFromRepr, - pconstantToRepr, - ) -import Plutus.V1.Ledger.Api qualified as Plutus -import PlutusTx.These qualified as PlutusThese - -data PTheseData (a :: PType) (b :: PType) (s :: S) - = PDThis (Term s (PDataRecord '["_0" ':= a])) - | PDThat (Term s (PDataRecord '["_0" ':= b])) - | PDThese (Term s (PDataRecord '["_0" ':= a, "_1" ':= b])) - deriving stock (GHC.Generic) - deriving anyclass (Generic, PIsDataRepr) - deriving - (PlutusType, PIsData) - via PIsDataReprInstances (PTheseData a b) - -instance - ( Plutus.ToData (PLifted a) - , Plutus.ToData (PLifted b) - , Plutus.FromData (PLifted a) - , Plutus.FromData (PLifted b) - , PLift a - , PLift b - ) => - PUnsafeLiftDecl (PTheseData a b) - where - type PLifted (PTheseData a b) = PlutusThese.These (PLifted a) (PLifted b) - -{- TODO: Make PTheseData an instance of PConstant: - https://github.com/Plutonomicon/plutarch/pull/355 --} - -instance - ( PLifted (PConstanted a) ~ a - , Plutus.ToData b - , Plutus.FromData b - , Plutus.ToData a - , Plutus.FromData a - , PConstant a - , PLifted (PConstanted b) ~ b - , Plutus.FromData b - , Plutus.ToData b - , PConstant b - ) => - PConstant (PlutusThese.These a b) - where - type PConstantRepr (PlutusThese.These a b) = [(Plutus.Data, Plutus.Data)] - type PConstanted (PlutusThese.These a b) = PTheseData (PConstanted a) (PConstanted b) - pconstantToRepr _t = undefined - pconstantFromRepr _t = undefined diff --git a/agora/Plutarch/These.hs b/agora/Plutarch/These.hs deleted file mode 100644 index f9b225a..0000000 --- a/agora/Plutarch/These.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Plutarch.These (PThese (..)) where - -import GHC.Generics qualified as GHC -import Generics.SOP - --- | Plutus These type with Scott-encoded representation. -data PThese (a :: PType) (b :: PType) (s :: S) - = PThis (Term s a) - | PThat (Term s b) - | PThese (Term s a) (Term s b) - deriving stock (GHC.Generic) - deriving anyclass (Generic, PlutusType) diff --git a/flake.lock b/flake.lock index 713ed75..a8f99c4 100644 --- a/flake.lock +++ b/flake.lock @@ -679,7 +679,7 @@ "nixpkgs": [ "apropos-tx", "haskell-nix", - "nixpkgs-2105" + "nixpkgs-unstable" ], "nixpkgs-2003": "nixpkgs-2003", "nixpkgs-2105": "nixpkgs-2105", @@ -731,6 +731,8 @@ "hpc-coveralls": "hpc-coveralls_2", "nix-tools": "nix-tools_2", "nixpkgs": [ + "plutarch", + "haskell-nix", "nixpkgs-2111" ], "nixpkgs-2003": "nixpkgs-2003_2", @@ -883,11 +885,11 @@ "iohk-nix_2": { "flake": false, "locked": { - "lastModified": 1646330344, - "narHash": "sha256-EbhMDeneH26wDi+x5kz8nfru/dE9JZ241hJed4a8lz8=", + "lastModified": 1648032999, + "narHash": "sha256-3uCz+gJppvM7z6CUCkBbFSu60WgIE+e3oXwXiAiGWSY=", "owner": "input-output-hk", "repo": "iohk-nix", - "rev": "0a0126d8fb1bdc61ce1fd2ef61cf396de800fdad", + "rev": "5e667b374153327c7bdfdbfab8ef19b1f27d4aac", "type": "github" }, "original": { @@ -1093,11 +1095,11 @@ }, "nixpkgs-2111_2": { "locked": { - "lastModified": 1646844010, - "narHash": "sha256-NRDLmpjmBMNBRr/BiztSsGht5wJYl8WZFzj+b+6LhLk=", + "lastModified": 1647902355, + "narHash": "sha256-SySJ8IRaogpc/BPOkysA+kzq9URvXthoeKIemaTKCiM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d59edd3833597be12763f1f017c7ad666cf1b810", + "rev": "31aa631dbc496500efd2507baaed39626f6650f2", "type": "github" }, "original": { @@ -1123,6 +1125,22 @@ "type": "github" } }, + "nixpkgs-2111_4": { + "locked": { + "lastModified": 1644510859, + "narHash": "sha256-xjpVvL5ecbyi0vxtVl/Fh9bwGlMbw3S06zE5nUzFB8A=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "0d1d5d7e3679fec9d07f2eb804d9f9fdb98378d3", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-21.11-darwin", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs-nixops": { "locked": { "lastModified": 1630248577, @@ -1274,6 +1292,7 @@ "haskell-nix", "nixpkgs-unstable" ], + "nixpkgs-2111": "nixpkgs-2111_4", "plutus": "plutus_2", "protolude": "protolude", "safe-coloured-text": "safe-coloured-text", @@ -1283,17 +1302,17 @@ "validity": "validity" }, "locked": { - "lastModified": 1646941827, - "narHash": "sha256-/TmkSDVOYD0Nsf6/tsyCSWhFUIeefwPn0Lz1oeZ7lyQ=", - "owner": "Plutonomicon", + "lastModified": 1648163186, + "narHash": "sha256-UfaSb4nk9HWzsj1Kb8RJuPV+iw1Nl4E2+97KOwIwcao=", + "owner": "peter-mlabs", "repo": "plutarch", - "rev": "cb29ca64df4ed193d94a062e3fe26aa37e59b7bc", + "rev": "0638dbd706bc2c5f48f9f40be7bbe1986a778698", "type": "github" }, "original": { - "owner": "Plutonomicon", + "owner": "peter-mlabs", + "ref": "liqwid/extra", "repo": "plutarch", - "rev": "cb29ca64df4ed193d94a062e3fe26aa37e59b7bc", "type": "github" } }, diff --git a/flake.nix b/flake.nix index 87fabb1..e49426e 100644 --- a/flake.nix +++ b/flake.nix @@ -3,6 +3,13 @@ inputs.nixpkgs.follows = "plutarch/nixpkgs"; inputs.haskell-nix.follows = "plutarch/haskell-nix"; + # temporary fix for nix versions that have the transitive follows bug + # see https://github.com/NixOS/nix/issues/6013 + inputs.nixpkgs-2111 = { url = "github:NixOS/nixpkgs/nixpkgs-21.11-darwin"; }; + + inputs.plutarch.url = "github:peter-mlabs/plutarch/liqwid/extra"; + inputs.plutarch.inputs.nixpkgs.follows = + "plutarch/haskell-nix/nixpkgs-unstable"; # https://github.com/mlabs-haskell/apropos-tx/pull/28 inputs.apropos-tx.url = @@ -10,15 +17,6 @@ inputs.apropos-tx.inputs.nixpkgs.follows = "plutarch/haskell-nix/nixpkgs-unstable"; - # temporary fix for nix versions that have the transitive follows bug - # see https://github.com/NixOS/nix/issues/6013 - inputs.nixpkgs-2111 = { url = "github:NixOS/nixpkgs/nixpkgs-21.11-darwin"; }; - - inputs.plutarch.url = - "github:Plutonomicon/plutarch?rev=cb29ca64df4ed193d94a062e3fe26aa37e59b7bc"; - inputs.plutarch.inputs.nixpkgs.follows = - "plutarch/haskell-nix/nixpkgs-unstable"; - outputs = inputs@{ self, nixpkgs, haskell-nix, plutarch, ... }: let supportedSystems = with nixpkgs.lib.systems.supported; @@ -32,7 +30,6 @@ overlays = [ haskell-nix.overlay ]; inherit (haskell-nix) config; }; - nixpkgsFor' = system: import nixpkgs { inherit system; @@ -51,7 +48,8 @@ extraSources = plutarch.extraSources ++ [ { src = inputs.plutarch; - subdirs = [ "." "plutarch-test" "plutarch-extra" ]; + subdirs = + [ "." "plutarch-test" "plutarch-extra" "plutarch-numeric" ]; } { src = inputs.apropos-tx; @@ -66,24 +64,27 @@ # We use the ones from Nixpkgs, since they are cached reliably. # Eventually we will probably want to build these with haskell.nix. - nativeBuildInputs = [ - pkgs'.git - pkgs'.haskellPackages.apply-refact - pkgs'.fd - pkgs'.cabal-install - pkgs'.haskell.packages."${ghcVersion}".hlint - pkgs'.haskellPackages.cabal-fmt - pkgs'.nixpkgs-fmt - pkgs'.graphviz + nativeBuildInputs = with pkgs'; [ + entr + haskellPackages.apply-refact + git + fd + cabal-install + haskell.packages."${ghcVersion}".hlint + haskellPackages.cabal-fmt + nixpkgs-fmt + graphviz ]; inherit (plutarch) tools; additional = ps: [ ps.plutarch - ps.plutarch-test + ps.tasty-quickcheck ps.apropos-tx ps.plutarch-extra + ps.plutarch-numeric + ps.plutarch-test ]; }; }; @@ -92,17 +93,15 @@ let pkgs = nixpkgsFor system; pkgs' = nixpkgsFor' system; - inherit (pkgs.haskell-nix.tools ghcVersion { - inherit (plutarch.tools) fourmolu; - }) - fourmolu; in pkgs.runCommand "format-check" { nativeBuildInputs = [ pkgs'.git pkgs'.fd pkgs'.haskellPackages.cabal-fmt pkgs'.nixpkgs-fmt - fourmolu + (pkgs.haskell-nix.tools ghcVersion { + inherit (plutarch.tools) fourmolu; + }).fourmolu ]; } '' export LC_CTYPE=C.UTF-8