module Plutarch.LedgerApi.Value.AssetClass (
PAssetClass (..),
) where
import GHC.Generics (Generic)
import Generics.SOP qualified as SOP
import Plutarch.LedgerApi.Value.CurrencySymbol (PCurrencySymbol)
import Plutarch.LedgerApi.Value.TokenName (PTokenName)
import Plutarch.Prelude
import PlutusLedgerApi.V1.Value qualified as PlutusValue
newtype PAssetClass (s :: S) = PAssetClass (Term s (PBuiltinPair (PAsData PCurrencySymbol) (PAsData PTokenName)))
deriving stock
(
(forall x. PAssetClass s -> Rep (PAssetClass s) x)
-> (forall x. Rep (PAssetClass s) x -> PAssetClass s)
-> Generic (PAssetClass s)
forall x. Rep (PAssetClass s) x -> PAssetClass s
forall x. PAssetClass s -> Rep (PAssetClass s) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall (s :: S) x. Rep (PAssetClass s) x -> PAssetClass s
forall (s :: S) x. PAssetClass s -> Rep (PAssetClass s) x
$cfrom :: forall (s :: S) x. PAssetClass s -> Rep (PAssetClass s) x
from :: forall x. PAssetClass s -> Rep (PAssetClass s) x
$cto :: forall (s :: S) x. Rep (PAssetClass s) x -> PAssetClass s
to :: forall x. Rep (PAssetClass s) x -> PAssetClass s
Generic
)
deriving anyclass
(
All SListI (Code (PAssetClass s))
All SListI (Code (PAssetClass s)) =>
(PAssetClass s -> Rep (PAssetClass s))
-> (Rep (PAssetClass s) -> PAssetClass s)
-> Generic (PAssetClass s)
Rep (PAssetClass s) -> PAssetClass s
PAssetClass s -> Rep (PAssetClass s)
forall a.
All SListI (Code a) =>
(a -> Rep a) -> (Rep a -> a) -> Generic a
forall (s :: S). All SListI (Code (PAssetClass s))
forall (s :: S). Rep (PAssetClass s) -> PAssetClass s
forall (s :: S). PAssetClass s -> Rep (PAssetClass s)
$cfrom :: forall (s :: S). PAssetClass s -> Rep (PAssetClass s)
from :: PAssetClass s -> Rep (PAssetClass s)
$cto :: forall (s :: S). Rep (PAssetClass s) -> PAssetClass s
to :: Rep (PAssetClass s) -> PAssetClass s
SOP.Generic
,
(forall (s :: S).
Term s (PAsData PAssetClass) -> Term s PAssetClass)
-> (forall (s :: S). Term s PAssetClass -> Term s PData)
-> PIsData PAssetClass
forall (s :: S). Term s (PAsData PAssetClass) -> Term s PAssetClass
forall (s :: S). Term s PAssetClass -> Term s PData
forall (a :: S -> Type).
(forall (s :: S). Term s (PAsData a) -> Term s a)
-> (forall (s :: S). Term s a -> Term s PData) -> PIsData a
$cpfromDataImpl :: forall (s :: S). Term s (PAsData PAssetClass) -> Term s PAssetClass
pfromDataImpl :: forall (s :: S). Term s (PAsData PAssetClass) -> Term s PAssetClass
$cpdataImpl :: forall (s :: S). Term s PAssetClass -> Term s PData
pdataImpl :: forall (s :: S). Term s PAssetClass -> Term s PData
PIsData
,
(forall (s :: S).
Term s PAssetClass -> Term s PAssetClass -> Term s PBool)
-> PEq PAssetClass
forall (s :: S).
Term s PAssetClass -> Term s PAssetClass -> Term s PBool
forall (t :: S -> Type).
(forall (s :: S). Term s t -> Term s t -> Term s PBool) -> PEq t
$c#== :: forall (s :: S).
Term s PAssetClass -> Term s PAssetClass -> Term s PBool
#== :: forall (s :: S).
Term s PAssetClass -> Term s PAssetClass -> Term s PBool
PEq
,
(forall (s :: S). Bool -> Term s PAssetClass -> Term s PString)
-> PShow PAssetClass
forall (s :: S). Bool -> Term s PAssetClass -> Term s PString
forall (t :: S -> Type).
(forall (s :: S). Bool -> Term s t -> Term s PString) -> PShow t
$cpshow' :: forall (s :: S). Bool -> Term s PAssetClass -> Term s PString
pshow' :: forall (s :: S). Bool -> Term s PAssetClass -> Term s PString
PShow
)
deriving
(
(forall (s :: S). PAssetClass s -> Term s (PInner PAssetClass))
-> (forall (s :: S) (b :: S -> Type).
Term s (PInner PAssetClass)
-> (PAssetClass s -> Term s b) -> Term s b)
-> PlutusType PAssetClass
forall (s :: S). PAssetClass s -> Term s (PInner PAssetClass)
forall (s :: S) (b :: S -> Type).
Term s (PInner PAssetClass)
-> (PAssetClass s -> Term s b) -> Term s b
forall (a :: S -> Type).
(forall (s :: S). a s -> Term s (PInner a))
-> (forall (s :: S) (b :: S -> Type).
Term s (PInner a) -> (a s -> Term s b) -> Term s b)
-> PlutusType a
$cpcon' :: forall (s :: S). PAssetClass s -> Term s (PInner PAssetClass)
pcon' :: forall (s :: S). PAssetClass s -> Term s (PInner PAssetClass)
$cpmatch' :: forall (s :: S) (b :: S -> Type).
Term s (PInner PAssetClass)
-> (PAssetClass s -> Term s b) -> Term s b
pmatch' :: forall (s :: S) (b :: S -> Type).
Term s (PInner PAssetClass)
-> (PAssetClass s -> Term s b) -> Term s b
PlutusType
)
via (DeriveNewtypePlutusType PAssetClass)
deriving
(
(forall (s :: S).
Term s PData -> forall (r :: S -> Type). Term s r -> Term s r)
-> PValidateData PAssetClass
forall (s :: S).
Term s PData -> forall (r :: S -> Type). Term s r -> Term s r
forall (a :: S -> Type).
(forall (s :: S).
Term s PData -> forall (r :: S -> Type). Term s r -> Term s r)
-> PValidateData a
$cpwithValidated :: forall (s :: S).
Term s PData -> forall (r :: S -> Type). Term s r -> Term s r
pwithValidated :: forall (s :: S).
Term s PData -> forall (r :: S -> Type). Term s r -> Term s r
PValidateData
)
via ( DeriveNewtypePValidateData
PAssetClass
(PBuiltinPair (PAsData PCurrencySymbol) (PAsData PTokenName))
)
instance POrd PAssetClass where
{-# INLINEABLE (#<=) #-}
Term s PAssetClass
ac1 #<= :: forall (s :: S).
Term s PAssetClass -> Term s PAssetClass -> Term s PBool
#<= Term s PAssetClass
ac2 = Term s PAssetClass
-> (PAssetClass s -> Term s PBool) -> Term s PBool
forall (a :: S -> Type) (s :: S) (b :: S -> Type).
PlutusType a =>
Term s a -> (a s -> Term s b) -> Term s b
pmatch Term s PAssetClass
ac1 ((PAssetClass s -> Term s PBool) -> Term s PBool)
-> (PAssetClass s -> Term s PBool) -> Term s PBool
forall a b. (a -> b) -> a -> b
$ \(PAssetClass Term
s (PBuiltinPair (PAsData PCurrencySymbol) (PAsData PTokenName))
pair1) ->
Term s PAssetClass
-> (PAssetClass s -> Term s PBool) -> Term s PBool
forall (a :: S -> Type) (s :: S) (b :: S -> Type).
PlutusType a =>
Term s a -> (a s -> Term s b) -> Term s b
pmatch Term s PAssetClass
ac2 ((PAssetClass s -> Term s PBool) -> Term s PBool)
-> (PAssetClass s -> Term s PBool) -> Term s PBool
forall a b. (a -> b) -> a -> b
$ \(PAssetClass Term
s (PBuiltinPair (PAsData PCurrencySymbol) (PAsData PTokenName))
pair2) ->
Term
s (PBuiltinPair (PAsData PCurrencySymbol) (PAsData PTokenName))
-> (PBuiltinPair (PAsData PCurrencySymbol) (PAsData PTokenName) s
-> Term s PBool)
-> Term s PBool
forall (a :: S -> Type) (s :: S) (b :: S -> Type).
PlutusType a =>
Term s a -> (a s -> Term s b) -> Term s b
pmatch Term
s (PBuiltinPair (PAsData PCurrencySymbol) (PAsData PTokenName))
pair1 ((PBuiltinPair (PAsData PCurrencySymbol) (PAsData PTokenName) s
-> Term s PBool)
-> Term s PBool)
-> (PBuiltinPair (PAsData PCurrencySymbol) (PAsData PTokenName) s
-> Term s PBool)
-> Term s PBool
forall a b. (a -> b) -> a -> b
$ \(PBuiltinPair Term s (PAsData PCurrencySymbol)
fst1' Term s (PAsData PTokenName)
snd1') ->
Term
s (PBuiltinPair (PAsData PCurrencySymbol) (PAsData PTokenName))
-> (PBuiltinPair (PAsData PCurrencySymbol) (PAsData PTokenName) s
-> Term s PBool)
-> Term s PBool
forall (a :: S -> Type) (s :: S) (b :: S -> Type).
PlutusType a =>
Term s a -> (a s -> Term s b) -> Term s b
pmatch Term
s (PBuiltinPair (PAsData PCurrencySymbol) (PAsData PTokenName))
pair2 ((PBuiltinPair (PAsData PCurrencySymbol) (PAsData PTokenName) s
-> Term s PBool)
-> Term s PBool)
-> (PBuiltinPair (PAsData PCurrencySymbol) (PAsData PTokenName) s
-> Term s PBool)
-> Term s PBool
forall a b. (a -> b) -> a -> b
$ \(PBuiltinPair Term s (PAsData PCurrencySymbol)
fst2' Term s (PAsData PTokenName)
snd2') ->
Term s PCurrencySymbol
-> (Term s PCurrencySymbol -> Term s PBool) -> Term s PBool
forall (s :: S) (a :: S -> Type) (b :: S -> Type).
Term s a -> (Term s a -> Term s b) -> Term s b
plet (Term s (PAsData PCurrencySymbol) -> Term s PCurrencySymbol
forall (a :: S -> Type) (s :: S).
PIsData a =>
Term s (PAsData a) -> Term s a
pfromData Term s (PAsData PCurrencySymbol)
fst1') ((Term s PCurrencySymbol -> Term s PBool) -> Term s PBool)
-> (Term s PCurrencySymbol -> Term s PBool) -> Term s PBool
forall a b. (a -> b) -> a -> b
$ \Term s PCurrencySymbol
fst1 ->
Term s PCurrencySymbol
-> (Term s PCurrencySymbol -> Term s PBool) -> Term s PBool
forall (s :: S) (a :: S -> Type) (b :: S -> Type).
Term s a -> (Term s a -> Term s b) -> Term s b
plet (Term s (PAsData PCurrencySymbol) -> Term s PCurrencySymbol
forall (a :: S -> Type) (s :: S).
PIsData a =>
Term s (PAsData a) -> Term s a
pfromData Term s (PAsData PCurrencySymbol)
fst2') ((Term s PCurrencySymbol -> Term s PBool) -> Term s PBool)
-> (Term s PCurrencySymbol -> Term s PBool) -> Term s PBool
forall a b. (a -> b) -> a -> b
$ \Term s PCurrencySymbol
fst2 ->
(Term s PCurrencySymbol
fst1 Term s PCurrencySymbol -> Term s PCurrencySymbol -> Term s PBool
forall (s :: S).
Term s PCurrencySymbol -> Term s PCurrencySymbol -> Term s PBool
forall (t :: S -> Type) (s :: S).
POrd t =>
Term s t -> Term s t -> Term s PBool
#< Term s PCurrencySymbol
fst2)
#|| ( (fst1 #== fst2)
#&& ( let snd1 = pfromData snd1'
snd2 = pfromData snd2'
in snd1 #<= snd2
)
)
{-# INLINEABLE (#<) #-}
Term s PAssetClass
ac1 #< :: forall (s :: S).
Term s PAssetClass -> Term s PAssetClass -> Term s PBool
#< Term s PAssetClass
ac2 = Term s PAssetClass
-> (PAssetClass s -> Term s PBool) -> Term s PBool
forall (a :: S -> Type) (s :: S) (b :: S -> Type).
PlutusType a =>
Term s a -> (a s -> Term s b) -> Term s b
pmatch Term s PAssetClass
ac1 ((PAssetClass s -> Term s PBool) -> Term s PBool)
-> (PAssetClass s -> Term s PBool) -> Term s PBool
forall a b. (a -> b) -> a -> b
$ \(PAssetClass Term
s (PBuiltinPair (PAsData PCurrencySymbol) (PAsData PTokenName))
pair1) ->
Term s PAssetClass
-> (PAssetClass s -> Term s PBool) -> Term s PBool
forall (a :: S -> Type) (s :: S) (b :: S -> Type).
PlutusType a =>
Term s a -> (a s -> Term s b) -> Term s b
pmatch Term s PAssetClass
ac2 ((PAssetClass s -> Term s PBool) -> Term s PBool)
-> (PAssetClass s -> Term s PBool) -> Term s PBool
forall a b. (a -> b) -> a -> b
$ \(PAssetClass Term
s (PBuiltinPair (PAsData PCurrencySymbol) (PAsData PTokenName))
pair2) ->
Term
s (PBuiltinPair (PAsData PCurrencySymbol) (PAsData PTokenName))
-> (PBuiltinPair (PAsData PCurrencySymbol) (PAsData PTokenName) s
-> Term s PBool)
-> Term s PBool
forall (a :: S -> Type) (s :: S) (b :: S -> Type).
PlutusType a =>
Term s a -> (a s -> Term s b) -> Term s b
pmatch Term
s (PBuiltinPair (PAsData PCurrencySymbol) (PAsData PTokenName))
pair1 ((PBuiltinPair (PAsData PCurrencySymbol) (PAsData PTokenName) s
-> Term s PBool)
-> Term s PBool)
-> (PBuiltinPair (PAsData PCurrencySymbol) (PAsData PTokenName) s
-> Term s PBool)
-> Term s PBool
forall a b. (a -> b) -> a -> b
$ \(PBuiltinPair Term s (PAsData PCurrencySymbol)
fst1' Term s (PAsData PTokenName)
snd1') ->
Term
s (PBuiltinPair (PAsData PCurrencySymbol) (PAsData PTokenName))
-> (PBuiltinPair (PAsData PCurrencySymbol) (PAsData PTokenName) s
-> Term s PBool)
-> Term s PBool
forall (a :: S -> Type) (s :: S) (b :: S -> Type).
PlutusType a =>
Term s a -> (a s -> Term s b) -> Term s b
pmatch Term
s (PBuiltinPair (PAsData PCurrencySymbol) (PAsData PTokenName))
pair2 ((PBuiltinPair (PAsData PCurrencySymbol) (PAsData PTokenName) s
-> Term s PBool)
-> Term s PBool)
-> (PBuiltinPair (PAsData PCurrencySymbol) (PAsData PTokenName) s
-> Term s PBool)
-> Term s PBool
forall a b. (a -> b) -> a -> b
$ \(PBuiltinPair Term s (PAsData PCurrencySymbol)
fst2' Term s (PAsData PTokenName)
snd2') ->
Term s PCurrencySymbol
-> (Term s PCurrencySymbol -> Term s PBool) -> Term s PBool
forall (s :: S) (a :: S -> Type) (b :: S -> Type).
Term s a -> (Term s a -> Term s b) -> Term s b
plet (Term s (PAsData PCurrencySymbol) -> Term s PCurrencySymbol
forall (a :: S -> Type) (s :: S).
PIsData a =>
Term s (PAsData a) -> Term s a
pfromData Term s (PAsData PCurrencySymbol)
fst1') ((Term s PCurrencySymbol -> Term s PBool) -> Term s PBool)
-> (Term s PCurrencySymbol -> Term s PBool) -> Term s PBool
forall a b. (a -> b) -> a -> b
$ \Term s PCurrencySymbol
fst1 ->
Term s PCurrencySymbol
-> (Term s PCurrencySymbol -> Term s PBool) -> Term s PBool
forall (s :: S) (a :: S -> Type) (b :: S -> Type).
Term s a -> (Term s a -> Term s b) -> Term s b
plet (Term s (PAsData PCurrencySymbol) -> Term s PCurrencySymbol
forall (a :: S -> Type) (s :: S).
PIsData a =>
Term s (PAsData a) -> Term s a
pfromData Term s (PAsData PCurrencySymbol)
fst2') ((Term s PCurrencySymbol -> Term s PBool) -> Term s PBool)
-> (Term s PCurrencySymbol -> Term s PBool) -> Term s PBool
forall a b. (a -> b) -> a -> b
$ \Term s PCurrencySymbol
fst2 ->
(Term s PCurrencySymbol
fst1 Term s PCurrencySymbol -> Term s PCurrencySymbol -> Term s PBool
forall (s :: S).
Term s PCurrencySymbol -> Term s PCurrencySymbol -> Term s PBool
forall (t :: S -> Type) (s :: S).
POrd t =>
Term s t -> Term s t -> Term s PBool
#< Term s PCurrencySymbol
fst2)
#|| ( (fst1 #== fst2)
#&& ( let snd1 = pfromData snd1'
snd2 = pfromData snd2'
in snd1 #< snd2
)
)
deriving via
DeriveNewtypePLiftable PAssetClass PlutusValue.AssetClass
instance
PLiftable PAssetClass
instance PTryFrom PData (PAsData PAssetClass)