commit
72de1a9cd9
7 changed files with 62 additions and 119 deletions
|
|
@ -95,6 +95,7 @@ common deps
|
||||||
, data-default-class
|
, data-default-class
|
||||||
, generics-sop
|
, generics-sop
|
||||||
, plutarch
|
, plutarch
|
||||||
|
, plutarch-extra
|
||||||
, plutus-core
|
, plutus-core
|
||||||
, plutus-ledger-api
|
, plutus-ledger-api
|
||||||
, plutus-tx
|
, plutus-tx
|
||||||
|
|
@ -128,8 +129,6 @@ library
|
||||||
other-modules:
|
other-modules:
|
||||||
Agora.Utils
|
Agora.Utils
|
||||||
Agora.Utils.Value
|
Agora.Utils.Value
|
||||||
Plutarch.Api.V1.These
|
|
||||||
Plutarch.These
|
|
||||||
|
|
||||||
hs-source-dirs: agora
|
hs-source-dirs: agora
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,14 +15,14 @@ import Plutarch.Api.V1 (
|
||||||
PAddress (..),
|
PAddress (..),
|
||||||
PCredential (..),
|
PCredential (..),
|
||||||
PCurrencySymbol (..),
|
PCurrencySymbol (..),
|
||||||
PMap (..),
|
|
||||||
PScriptContext (..),
|
PScriptContext (..),
|
||||||
PScriptPurpose (..),
|
PScriptPurpose (..),
|
||||||
PTxInInfo (..),
|
PTxInInfo (..),
|
||||||
PTxInfo (..),
|
PTxInfo (..),
|
||||||
PTxOut (..),
|
PTxOut (..),
|
||||||
PValue (..),
|
|
||||||
)
|
)
|
||||||
|
import Plutarch.Api.V1.AssocMap (PMap (PMap))
|
||||||
|
import Plutarch.Api.V1.Value (PValue (PValue))
|
||||||
import Plutarch.Builtin (pforgetData)
|
import Plutarch.Builtin (pforgetData)
|
||||||
import Plutarch.List (pfoldr')
|
import Plutarch.List (pfoldr')
|
||||||
import Plutarch.Monadic qualified as P
|
import Plutarch.Monadic qualified as P
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,6 @@ import Plutarch.Api.V1 (
|
||||||
PCurrencySymbol,
|
PCurrencySymbol,
|
||||||
PDatum,
|
PDatum,
|
||||||
PDatumHash,
|
PDatumHash,
|
||||||
PMap (PMap),
|
|
||||||
PMaybeData (PDJust),
|
PMaybeData (PDJust),
|
||||||
PPubKeyHash,
|
PPubKeyHash,
|
||||||
PTokenName,
|
PTokenName,
|
||||||
|
|
@ -53,8 +52,9 @@ import Plutarch.Api.V1 (
|
||||||
PTxInfo (PTxInfo),
|
PTxInfo (PTxInfo),
|
||||||
PTxOut (PTxOut),
|
PTxOut (PTxOut),
|
||||||
PTxOutRef,
|
PTxOutRef,
|
||||||
PValue (PValue),
|
|
||||||
)
|
)
|
||||||
|
import Plutarch.Api.V1.AssocMap (PMap (PMap))
|
||||||
|
import Plutarch.Api.V1.Value (PValue (PValue))
|
||||||
import Plutarch.Builtin (ppairDataBuiltin)
|
import Plutarch.Builtin (ppairDataBuiltin)
|
||||||
import Plutarch.Internal (punsafeCoerce)
|
import Plutarch.Internal (punsafeCoerce)
|
||||||
import Plutarch.Monadic qualified as P
|
import Plutarch.Monadic qualified as P
|
||||||
|
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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)
|
|
||||||
45
flake.lock
generated
45
flake.lock
generated
|
|
@ -679,7 +679,7 @@
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"apropos-tx",
|
"apropos-tx",
|
||||||
"haskell-nix",
|
"haskell-nix",
|
||||||
"nixpkgs-2105"
|
"nixpkgs-unstable"
|
||||||
],
|
],
|
||||||
"nixpkgs-2003": "nixpkgs-2003",
|
"nixpkgs-2003": "nixpkgs-2003",
|
||||||
"nixpkgs-2105": "nixpkgs-2105",
|
"nixpkgs-2105": "nixpkgs-2105",
|
||||||
|
|
@ -731,6 +731,8 @@
|
||||||
"hpc-coveralls": "hpc-coveralls_2",
|
"hpc-coveralls": "hpc-coveralls_2",
|
||||||
"nix-tools": "nix-tools_2",
|
"nix-tools": "nix-tools_2",
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
|
"plutarch",
|
||||||
|
"haskell-nix",
|
||||||
"nixpkgs-2111"
|
"nixpkgs-2111"
|
||||||
],
|
],
|
||||||
"nixpkgs-2003": "nixpkgs-2003_2",
|
"nixpkgs-2003": "nixpkgs-2003_2",
|
||||||
|
|
@ -883,11 +885,11 @@
|
||||||
"iohk-nix_2": {
|
"iohk-nix_2": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1646330344,
|
"lastModified": 1648032999,
|
||||||
"narHash": "sha256-EbhMDeneH26wDi+x5kz8nfru/dE9JZ241hJed4a8lz8=",
|
"narHash": "sha256-3uCz+gJppvM7z6CUCkBbFSu60WgIE+e3oXwXiAiGWSY=",
|
||||||
"owner": "input-output-hk",
|
"owner": "input-output-hk",
|
||||||
"repo": "iohk-nix",
|
"repo": "iohk-nix",
|
||||||
"rev": "0a0126d8fb1bdc61ce1fd2ef61cf396de800fdad",
|
"rev": "5e667b374153327c7bdfdbfab8ef19b1f27d4aac",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -1093,11 +1095,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs-2111_2": {
|
"nixpkgs-2111_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1646844010,
|
"lastModified": 1647902355,
|
||||||
"narHash": "sha256-NRDLmpjmBMNBRr/BiztSsGht5wJYl8WZFzj+b+6LhLk=",
|
"narHash": "sha256-SySJ8IRaogpc/BPOkysA+kzq9URvXthoeKIemaTKCiM=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "d59edd3833597be12763f1f017c7ad666cf1b810",
|
"rev": "31aa631dbc496500efd2507baaed39626f6650f2",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -1123,6 +1125,22 @@
|
||||||
"type": "github"
|
"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": {
|
"nixpkgs-nixops": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1630248577,
|
"lastModified": 1630248577,
|
||||||
|
|
@ -1274,6 +1292,7 @@
|
||||||
"haskell-nix",
|
"haskell-nix",
|
||||||
"nixpkgs-unstable"
|
"nixpkgs-unstable"
|
||||||
],
|
],
|
||||||
|
"nixpkgs-2111": "nixpkgs-2111_4",
|
||||||
"plutus": "plutus_2",
|
"plutus": "plutus_2",
|
||||||
"protolude": "protolude",
|
"protolude": "protolude",
|
||||||
"safe-coloured-text": "safe-coloured-text",
|
"safe-coloured-text": "safe-coloured-text",
|
||||||
|
|
@ -1283,17 +1302,17 @@
|
||||||
"validity": "validity"
|
"validity": "validity"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1646941827,
|
"lastModified": 1648163186,
|
||||||
"narHash": "sha256-/TmkSDVOYD0Nsf6/tsyCSWhFUIeefwPn0Lz1oeZ7lyQ=",
|
"narHash": "sha256-UfaSb4nk9HWzsj1Kb8RJuPV+iw1Nl4E2+97KOwIwcao=",
|
||||||
"owner": "Plutonomicon",
|
"owner": "peter-mlabs",
|
||||||
"repo": "plutarch",
|
"repo": "plutarch",
|
||||||
"rev": "cb29ca64df4ed193d94a062e3fe26aa37e59b7bc",
|
"rev": "0638dbd706bc2c5f48f9f40be7bbe1986a778698",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "Plutonomicon",
|
"owner": "peter-mlabs",
|
||||||
|
"ref": "liqwid/extra",
|
||||||
"repo": "plutarch",
|
"repo": "plutarch",
|
||||||
"rev": "cb29ca64df4ed193d94a062e3fe26aa37e59b7bc",
|
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
||||||
51
flake.nix
51
flake.nix
|
|
@ -3,6 +3,13 @@
|
||||||
|
|
||||||
inputs.nixpkgs.follows = "plutarch/nixpkgs";
|
inputs.nixpkgs.follows = "plutarch/nixpkgs";
|
||||||
inputs.haskell-nix.follows = "plutarch/haskell-nix";
|
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
|
# https://github.com/mlabs-haskell/apropos-tx/pull/28
|
||||||
inputs.apropos-tx.url =
|
inputs.apropos-tx.url =
|
||||||
|
|
@ -10,15 +17,6 @@
|
||||||
inputs.apropos-tx.inputs.nixpkgs.follows =
|
inputs.apropos-tx.inputs.nixpkgs.follows =
|
||||||
"plutarch/haskell-nix/nixpkgs-unstable";
|
"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, ... }:
|
outputs = inputs@{ self, nixpkgs, haskell-nix, plutarch, ... }:
|
||||||
let
|
let
|
||||||
supportedSystems = with nixpkgs.lib.systems.supported;
|
supportedSystems = with nixpkgs.lib.systems.supported;
|
||||||
|
|
@ -32,7 +30,6 @@
|
||||||
overlays = [ haskell-nix.overlay ];
|
overlays = [ haskell-nix.overlay ];
|
||||||
inherit (haskell-nix) config;
|
inherit (haskell-nix) config;
|
||||||
};
|
};
|
||||||
|
|
||||||
nixpkgsFor' = system:
|
nixpkgsFor' = system:
|
||||||
import nixpkgs {
|
import nixpkgs {
|
||||||
inherit system;
|
inherit system;
|
||||||
|
|
@ -51,7 +48,8 @@
|
||||||
extraSources = plutarch.extraSources ++ [
|
extraSources = plutarch.extraSources ++ [
|
||||||
{
|
{
|
||||||
src = inputs.plutarch;
|
src = inputs.plutarch;
|
||||||
subdirs = [ "." "plutarch-test" "plutarch-extra" ];
|
subdirs =
|
||||||
|
[ "." "plutarch-test" "plutarch-extra" "plutarch-numeric" ];
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
src = inputs.apropos-tx;
|
src = inputs.apropos-tx;
|
||||||
|
|
@ -66,24 +64,27 @@
|
||||||
|
|
||||||
# We use the ones from Nixpkgs, since they are cached reliably.
|
# We use the ones from Nixpkgs, since they are cached reliably.
|
||||||
# Eventually we will probably want to build these with haskell.nix.
|
# Eventually we will probably want to build these with haskell.nix.
|
||||||
nativeBuildInputs = [
|
nativeBuildInputs = with pkgs'; [
|
||||||
pkgs'.git
|
entr
|
||||||
pkgs'.haskellPackages.apply-refact
|
haskellPackages.apply-refact
|
||||||
pkgs'.fd
|
git
|
||||||
pkgs'.cabal-install
|
fd
|
||||||
pkgs'.haskell.packages."${ghcVersion}".hlint
|
cabal-install
|
||||||
pkgs'.haskellPackages.cabal-fmt
|
haskell.packages."${ghcVersion}".hlint
|
||||||
pkgs'.nixpkgs-fmt
|
haskellPackages.cabal-fmt
|
||||||
pkgs'.graphviz
|
nixpkgs-fmt
|
||||||
|
graphviz
|
||||||
];
|
];
|
||||||
|
|
||||||
inherit (plutarch) tools;
|
inherit (plutarch) tools;
|
||||||
|
|
||||||
additional = ps: [
|
additional = ps: [
|
||||||
ps.plutarch
|
ps.plutarch
|
||||||
ps.plutarch-test
|
ps.tasty-quickcheck
|
||||||
ps.apropos-tx
|
ps.apropos-tx
|
||||||
ps.plutarch-extra
|
ps.plutarch-extra
|
||||||
|
ps.plutarch-numeric
|
||||||
|
ps.plutarch-test
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
@ -92,17 +93,15 @@
|
||||||
let
|
let
|
||||||
pkgs = nixpkgsFor system;
|
pkgs = nixpkgsFor system;
|
||||||
pkgs' = nixpkgsFor' system;
|
pkgs' = nixpkgsFor' system;
|
||||||
inherit (pkgs.haskell-nix.tools ghcVersion {
|
|
||||||
inherit (plutarch.tools) fourmolu;
|
|
||||||
})
|
|
||||||
fourmolu;
|
|
||||||
in pkgs.runCommand "format-check" {
|
in pkgs.runCommand "format-check" {
|
||||||
nativeBuildInputs = [
|
nativeBuildInputs = [
|
||||||
pkgs'.git
|
pkgs'.git
|
||||||
pkgs'.fd
|
pkgs'.fd
|
||||||
pkgs'.haskellPackages.cabal-fmt
|
pkgs'.haskellPackages.cabal-fmt
|
||||||
pkgs'.nixpkgs-fmt
|
pkgs'.nixpkgs-fmt
|
||||||
fourmolu
|
(pkgs.haskell-nix.tools ghcVersion {
|
||||||
|
inherit (plutarch.tools) fourmolu;
|
||||||
|
}).fourmolu
|
||||||
];
|
];
|
||||||
} ''
|
} ''
|
||||||
export LC_CTYPE=C.UTF-8
|
export LC_CTYPE=C.UTF-8
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue