plutarch-1.3.0
Safe HaskellSafe-Inferred
LanguageGHC2021

Plutarch.DataRepr

Synopsis

DataRepr

newtype PDataSum defs s Source #

A sum of PDataRecords. The underlying representation is the Constr constructor, where the integer is the index of the variant and the list is the record.

Constructors

PDataSum (NS (Compose (Term s) PDataRecord) defs) 

Instances

Instances details
PTryFrom PData (PDataSum ys) => PTryFrom PData (PAsData (PDataSum ys)) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

Associated Types

type PTryFromExcess PData (PAsData (PDataSum ys)) :: PType Source #

Methods

ptryFrom' :: forall (s :: S) (r :: PType). Term s PData -> ((Term s (PAsData (PDataSum ys)), Reduce (PTryFromExcess PData (PAsData (PDataSum ys)) s)) -> Term s r) -> Term s r Source #

SumValidation 0 ys => PTryFrom PData (PDataSum ys) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

Associated Types

type PTryFromExcess PData (PDataSum ys) :: PType Source #

Methods

ptryFrom' :: forall (s :: S) (r :: PType). Term s PData -> ((Term s (PDataSum ys), Reduce (PTryFromExcess PData (PDataSum ys) s)) -> Term s r) -> Term s r Source #

PEq (PDataSum defs) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

Methods

(#==) :: forall (s :: S). Term s (PDataSum defs) -> Term s (PDataSum defs) -> Term s PBool Source #

All (Compose POrd PDataRecord) defs => POrd (PDataSum defs) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

All (Compose POrd PDataRecord) defs => PPartialOrd (PDataSum defs) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

Methods

(#<=) :: forall (s :: S). Term s (PDataSum defs) -> Term s (PDataSum defs) -> Term s PBool Source #

(#<) :: forall (s :: S). Term s (PDataSum defs) -> Term s (PDataSum defs) -> Term s PBool Source #

PIsData (PDataSum defs) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

Methods

pfromDataImpl :: forall (s :: S). Term s (PAsData (PDataSum defs)) -> Term s (PDataSum defs) Source #

pdataImpl :: forall (s :: S). Term s (PDataSum defs) -> Term s PData Source #

PDataFields (PDataSum '[as]) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal.Field

Associated Types

type PFields (PDataSum '[as]) :: [PLabeledType] Source #

Methods

ptoFields :: forall (s :: S). Term s (PDataSum '[as]) -> Term s (PDataRecord (PFields (PDataSum '[as]))) Source #

SListI defs => PlutusType (PDataSum defs) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

Associated Types

type PInner (PDataSum defs) :: PType Source #

type PCovariant' (PDataSum defs) Source #

type PContravariant' (PDataSum defs) Source #

type PVariant' (PDataSum defs) Source #

Methods

pcon' :: forall (s :: S). PDataSum defs s -> Term s (PInner (PDataSum defs)) Source #

pmatch' :: forall (s :: S) (b :: PType). Term s (PInner (PDataSum defs)) -> (PDataSum defs s -> Term s b) -> Term s b Source #

(All (Top :: [PLabeledType] -> Constraint) defs, All (Compose PShow PDataRecord) defs) => PShow (PDataSum defs) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

Methods

pshow' :: forall (s :: S). Bool -> Term s (PDataSum defs) -> Term s PString Source #

type PTryFromExcess PData (PAsData (PDataSum ys)) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

type PTryFromExcess PData (PDataSum ys) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

type PTryFromExcess PData (PDataSum ys) = Const () :: S -> Type
type PFields (PDataSum '[as]) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal.Field

type PFields (PDataSum '[as]) = as
type PContravariant' (PDataSum defs) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

type PCovariant' (PDataSum defs) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

type PCovariant' (PDataSum defs)
type PInner (PDataSum defs) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

type PInner (PDataSum defs) = PData
type PVariant' (PDataSum defs) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

type PVariant' (PDataSum defs)

punDataSum :: Term s (PDataSum '[def] :--> PDataRecord def) Source #

If there is only a single variant, then we can safely extract it.

ptryIndexDataSum :: KnownNat n => Proxy n -> Term s (PDataSum (def ': defs) :--> PDataRecord (IndexList n (def ': defs))) Source #

Try getting the nth variant. Errs if it's another variant.

data DataReprHandlers (out :: PType) (defs :: [[PLabeledType]]) (s :: S) where Source #

Constructors

DRHNil :: DataReprHandlers out '[] s 
DRHCons :: (Term s (PDataRecord def) -> Term s out) -> DataReprHandlers out defs s -> DataReprHandlers out (def ': defs) s 

data PDataRecord (as :: [PLabeledType]) (s :: S) where Source #

A "record" of `exists a. PAsData a`. The underlying representation is `PBuiltinList PData`.

Constructors

PDCons :: forall name_x x xs s. PUnLabel name_x ~ x => Term s (PAsData x) -> Term s (PDataRecord xs) -> PDataRecord (name_x ': xs) s 
PDNil :: PDataRecord '[] s 

Instances

Instances details
(PTryFrom (PBuiltinList PData) (PDataRecord as), PTryFromExcess (PBuiltinList PData) (PDataRecord as) ~ HRecP ase) => PTryFrom PData (PAsData (PDataRecord as)) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

Associated Types

type PTryFromExcess PData (PAsData (PDataRecord as)) :: PType Source #

Methods

ptryFrom' :: forall (s :: S) (r :: PType). Term s PData -> ((Term s (PAsData (PDataRecord as)), Reduce (PTryFromExcess PData (PAsData (PDataRecord as)) s)) -> Term s r) -> Term s r Source #

PEq (PDataRecord xs) Source #

This uses data equality. PEq instances of elements don't make any difference.

Instance details

Defined in Plutarch.DataRepr.Internal

Methods

(#==) :: forall (s :: S). Term s (PDataRecord xs) -> Term s (PDataRecord xs) -> Term s PBool Source #

(SListI xs, POrd x, PIsData x, POrd (PDataRecord (x' ': xs))) => POrd (PDataRecord ((label := x) ': (x' ': xs))) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

(POrd x, PIsData x) => POrd (PDataRecord '[label := x]) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

POrd (PDataRecord ('[] :: [PLabeledType])) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

(SListI xs, POrd x, PIsData x, POrd (PDataRecord (x' ': xs))) => PPartialOrd (PDataRecord ((label := x) ': (x' ': xs))) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

Methods

(#<=) :: forall (s :: S). Term s (PDataRecord ((label := x) ': (x' ': xs))) -> Term s (PDataRecord ((label := x) ': (x' ': xs))) -> Term s PBool Source #

(#<) :: forall (s :: S). Term s (PDataRecord ((label := x) ': (x' ': xs))) -> Term s (PDataRecord ((label := x) ': (x' ': xs))) -> Term s PBool Source #

(POrd x, PIsData x) => PPartialOrd (PDataRecord '[label := x]) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

Methods

(#<=) :: forall (s :: S). Term s (PDataRecord '[label := x]) -> Term s (PDataRecord '[label := x]) -> Term s PBool Source #

(#<) :: forall (s :: S). Term s (PDataRecord '[label := x]) -> Term s (PDataRecord '[label := x]) -> Term s PBool Source #

PPartialOrd (PDataRecord ('[] :: [PLabeledType])) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

Methods

(#<=) :: forall (s :: S). Term s (PDataRecord '[]) -> Term s (PDataRecord '[]) -> Term s PBool Source #

(#<) :: forall (s :: S). Term s (PDataRecord '[]) -> Term s (PDataRecord '[]) -> Term s PBool Source #

PIsData (PDataRecord xs) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

Methods

pfromDataImpl :: forall (s :: S). Term s (PAsData (PDataRecord xs)) -> Term s (PDataRecord xs) Source #

pdataImpl :: forall (s :: S). Term s (PDataRecord xs) -> Term s PData Source #

PDataFields (PDataRecord as) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal.Field

Associated Types

type PFields (PDataRecord as) :: [PLabeledType] Source #

Methods

ptoFields :: forall (s :: S). Term s (PDataRecord as) -> Term s (PDataRecord (PFields (PDataRecord as))) Source #

SListI l => PlutusType (PDataRecord l) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

Methods

pcon' :: forall (s :: S). PDataRecord l s -> Term s (PInner (PDataRecord l)) Source #

pmatch' :: forall (s :: S) (b :: PType). Term s (PInner (PDataRecord l)) -> (PDataRecord l s -> Term s b) -> Term s b Source #

(All (Top :: PLabeledType -> Constraint) xs, KnownSymbol label, PIsData x, PShow x, PShow (PDataRecordShowHelper xs)) => PShow (PDataRecord ((label := x) ': xs)) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

Methods

pshow' :: forall (s :: S). Bool -> Term s (PDataRecord ((label := x) ': xs)) -> Term s PString Source #

PShow (PDataRecord ('[] :: [PLabeledType])) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

Methods

pshow' :: forall (s :: S). Bool -> Term s (PDataRecord '[]) -> Term s PString Source #

(Helper2 (PSubtype' PData pty) pty, PTryFrom (PBuiltinList PData) (PDataRecord as), PTryFromExcess (PBuiltinList PData) (PDataRecord as) ~ HRecP ase) => PTryFrom (PBuiltinList PData) (PDataRecord ((name := pty) ': as)) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

Associated Types

type PTryFromExcess (PBuiltinList PData) (PDataRecord ((name := pty) ': as)) :: PType Source #

Methods

ptryFrom' :: forall (s :: S) (r :: PType). Term s (PBuiltinList PData) -> ((Term s (PDataRecord ((name := pty) ': as)), Reduce (PTryFromExcess (PBuiltinList PData) (PDataRecord ((name := pty) ': as)) s)) -> Term s r) -> Term s r Source #

PTryFrom (PBuiltinList PData) (PDataRecord ('[] :: [PLabeledType])) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

Associated Types

type PTryFromExcess (PBuiltinList PData) (PDataRecord '[]) :: PType Source #

Methods

ptryFrom' :: forall (s :: S) (r :: PType). Term s (PBuiltinList PData) -> ((Term s (PDataRecord '[]), Reduce (PTryFromExcess (PBuiltinList PData) (PDataRecord '[]) s)) -> Term s r) -> Term s r Source #

type PTryFromExcess PData (PAsData (PDataRecord as)) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

type PFields (PDataRecord as) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal.Field

type PFields (PDataRecord as) = as
type PContravariant' (PDataRecord l) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

type PCovariant' (PDataRecord l) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

type PInner (PDataRecord l) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

type PVariant' (PDataRecord l) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

type PTryFromExcess (PBuiltinList PData) (PDataRecord ((name := pty) ': as)) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

type PTryFromExcess (PBuiltinList PData) (PDataRecord ((name := pty) ': as))
type PTryFromExcess (PBuiltinList PData) (PDataRecord ('[] :: [PLabeledType])) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

pdcons :: forall label a l s. Term s (PAsData a :--> (PDataRecord l :--> PDataRecord ((label := a) ': l))) Source #

Cons a field to a data record.

You can specify the label to associate with the field using type applications-

foo :: Term s (PDataRecord '[ "fooField" ':= PByteString ])
foo = pdcons @"fooField" # pdata (phexByteStr "ab") # pdnil

data PLabeledType Source #

Constructors

Symbol := PType 

Instances

Instances details
(SListI xs, POrd x, PIsData x, POrd (PDataRecord (x' ': xs))) => POrd (PDataRecord ((label := x) ': (x' ': xs))) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

(POrd x, PIsData x) => POrd (PDataRecord '[label := x]) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

POrd (PDataRecord ('[] :: [PLabeledType])) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

(SListI xs, POrd x, PIsData x, POrd (PDataRecord (x' ': xs))) => PPartialOrd (PDataRecord ((label := x) ': (x' ': xs))) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

Methods

(#<=) :: forall (s :: S). Term s (PDataRecord ((label := x) ': (x' ': xs))) -> Term s (PDataRecord ((label := x) ': (x' ': xs))) -> Term s PBool Source #

(#<) :: forall (s :: S). Term s (PDataRecord ((label := x) ': (x' ': xs))) -> Term s (PDataRecord ((label := x) ': (x' ': xs))) -> Term s PBool Source #

(POrd x, PIsData x) => PPartialOrd (PDataRecord '[label := x]) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

Methods

(#<=) :: forall (s :: S). Term s (PDataRecord '[label := x]) -> Term s (PDataRecord '[label := x]) -> Term s PBool Source #

(#<) :: forall (s :: S). Term s (PDataRecord '[label := x]) -> Term s (PDataRecord '[label := x]) -> Term s PBool Source #

PPartialOrd (PDataRecord ('[] :: [PLabeledType])) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

Methods

(#<=) :: forall (s :: S). Term s (PDataRecord '[]) -> Term s (PDataRecord '[]) -> Term s PBool Source #

(#<) :: forall (s :: S). Term s (PDataRecord '[]) -> Term s (PDataRecord '[]) -> Term s PBool Source #

PDataFields (PDataSum '[as]) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal.Field

Associated Types

type PFields (PDataSum '[as]) :: [PLabeledType] Source #

Methods

ptoFields :: forall (s :: S). Term s (PDataSum '[as]) -> Term s (PDataRecord (PFields (PDataSum '[as]))) Source #

(All (Top :: PLabeledType -> Constraint) xs, KnownSymbol label, PIsData x, PShow x, PShow (PDataRecordShowHelper xs)) => PShow (PDataRecord ((label := x) ': xs)) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

Methods

pshow' :: forall (s :: S). Bool -> Term s (PDataRecord ((label := x) ': xs)) -> Term s PString Source #

PShow (PDataRecord ('[] :: [PLabeledType])) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

Methods

pshow' :: forall (s :: S). Bool -> Term s (PDataRecord '[]) -> Term s PString Source #

(Helper2 (PSubtype' PData pty) pty, PTryFrom (PBuiltinList PData) (PDataRecord as), PTryFromExcess (PBuiltinList PData) (PDataRecord as) ~ HRecP ase) => PTryFrom (PBuiltinList PData) (PDataRecord ((name := pty) ': as)) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

Associated Types

type PTryFromExcess (PBuiltinList PData) (PDataRecord ((name := pty) ': as)) :: PType Source #

Methods

ptryFrom' :: forall (s :: S) (r :: PType). Term s (PBuiltinList PData) -> ((Term s (PDataRecord ((name := pty) ': as)), Reduce (PTryFromExcess (PBuiltinList PData) (PDataRecord ((name := pty) ': as)) s)) -> Term s r) -> Term s r Source #

PTryFrom (PBuiltinList PData) (PDataRecord ('[] :: [PLabeledType])) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

Associated Types

type PTryFromExcess (PBuiltinList PData) (PDataRecord '[]) :: PType Source #

Methods

ptryFrom' :: forall (s :: S) (r :: PType). Term s (PBuiltinList PData) -> ((Term s (PDataRecord '[]), Reduce (PTryFromExcess (PBuiltinList PData) (PDataRecord '[]) s)) -> Term s r) -> Term s r Source #

type PFields (PDataSum '[as]) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal.Field

type PFields (PDataSum '[as]) = as
type PTryFromExcess (PBuiltinList PData) (PDataRecord ((name := pty) ': as)) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

type PTryFromExcess (PBuiltinList PData) (PDataRecord ((name := pty) ': as))
type PTryFromExcess (PBuiltinList PData) (PDataRecord ('[] :: [PLabeledType])) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal

pindexDataRecord :: KnownNat n => Proxy n -> Term s (PDataRecord as) -> Term s (PAsData (PUnLabel (IndexList n as))) Source #

Safely index a PDataRecord.

pdropDataRecord :: KnownNat n => Proxy n -> Term s (PDataRecord xs) -> Term s (PDataRecord (Drop n xs)) Source #

Safely drop the first n items of a PDataRecord.

newtype DerivePConstantViaData (h :: Type) (p :: PType) Source #

For deriving PConstant for a wrapped type represented by a builtin type, see DerivePConstantViaNewtype.

Constructors

DerivePConstantViaData h

The Haskell type for which @PConstant is being derived.

type PConstantData h = (PConstant h, FromData h, ToData h, PIsData (PConstanted h)) Source #

Type synonym to simplify deriving of PConstant via DerivePConstantViaData.

A type Foo a is considered ConstantableData if:

  • The wrapped type a has a PConstant instance.
  • The lifted type of a has a PUnsafeLiftDecl instance.
  • There is type equality between a and PLifted (PConstanted a).
  • The newtype has FromData and ToData instances

These constraints are sufficient to derive a PConstant instance for the newtype.

For deriving PConstant for a wrapped type represented in UPLC as Data, see DerivePConstantViaData.

Polymorphic types can be derived as follows:

data Bar a = Bar a deriving stock (GHC.Generic)

PlutusTx.makeLift ''Bar
PlutusTx.makeIsDataIndexed ''Bar [('Bar, 0)]

data PBar (a :: PType) (s :: S)
  = PBar (Term s (PDataRecord '["_0" ':= a]))
  deriving stock (GHC.Generic)
  deriving anyclass (SOP.Generic, PIsDataRepr)
  deriving (PlutusType, PIsData, PDataFields) via PIsDataReprInstances (PBar a)

instance
  forall a.
  PLiftData a =>
  PUnsafeLiftDecl (PBar a)
  where
  type PLifted (PBar a) = Bar (PLifted a)

deriving via
  ( DerivePConstantViaData
      (Bar a)
      (PBar (PConstanted a))
  )
  instance
    PConstantData a =>
    PConstantDecl (Bar a)

Fields

class PDataFields (a :: PType) where Source #

Class allowing letFields to work for a PType, usually via PIsDataRepr, but is derived for some other types for convenience.

Minimal complete definition

Nothing

Associated Types

type PFields a :: [PLabeledType] Source #

Fields in HRec bound by letFields

type PFields a = Helper (PInner a)

Methods

ptoFields :: Term s a -> Term s (PDataRecord (PFields a)) Source #

Convert a Term to a PDataList

default ptoFields :: (PDataFields (PInner a), PFields (PInner a) ~ PFields a) => Term s a -> Term s (PDataRecord (PFields a)) Source #

Instances

Instances details
PDataFields PAddress Source # 
Instance details

Defined in Plutarch.Api.V1.Address

Associated Types

type PFields PAddress :: [PLabeledType] Source #

Methods

ptoFields :: forall (s :: S). Term s PAddress -> Term s (PDataRecord (PFields PAddress)) Source #

PDataFields PScriptContext Source # 
Instance details

Defined in Plutarch.Api.V1.Contexts

Associated Types

type PFields PScriptContext :: [PLabeledType] Source #

PDataFields PTxInfo Source # 
Instance details

Defined in Plutarch.Api.V1.Contexts

Associated Types

type PFields PTxInfo :: [PLabeledType] Source #

Methods

ptoFields :: forall (s :: S). Term s PTxInfo -> Term s (PDataRecord (PFields PTxInfo)) Source #

PDataFields PTxId Source # 
Instance details

Defined in Plutarch.Api.V1.Tx

Associated Types

type PFields PTxId :: [PLabeledType] Source #

Methods

ptoFields :: forall (s :: S). Term s PTxId -> Term s (PDataRecord (PFields PTxId)) Source #

PDataFields PTxInInfo Source # 
Instance details

Defined in Plutarch.Api.V1.Tx

Associated Types

type PFields PTxInInfo :: [PLabeledType] Source #

Methods

ptoFields :: forall (s :: S). Term s PTxInInfo -> Term s (PDataRecord (PFields PTxInInfo)) Source #

PDataFields PTxOut Source # 
Instance details

Defined in Plutarch.Api.V1.Tx

Associated Types

type PFields PTxOut :: [PLabeledType] Source #

Methods

ptoFields :: forall (s :: S). Term s PTxOut -> Term s (PDataRecord (PFields PTxOut)) Source #

PDataFields PTxOutRef Source # 
Instance details

Defined in Plutarch.Api.V1.Tx

Associated Types

type PFields PTxOutRef :: [PLabeledType] Source #

Methods

ptoFields :: forall (s :: S). Term s PTxOutRef -> Term s (PDataRecord (PFields PTxOutRef)) Source #

PDataFields PScriptContext Source # 
Instance details

Defined in Plutarch.Api.V2.Contexts

Associated Types

type PFields PScriptContext :: [PLabeledType] Source #

PDataFields PTxInfo Source # 
Instance details

Defined in Plutarch.Api.V2.Contexts

Associated Types

type PFields PTxInfo :: [PLabeledType] Source #

Methods

ptoFields :: forall (s :: S). Term s PTxInfo -> Term s (PDataRecord (PFields PTxInfo)) Source #

PDataFields PTxInInfo Source # 
Instance details

Defined in Plutarch.Api.V2.Tx

Associated Types

type PFields PTxInInfo :: [PLabeledType] Source #

Methods

ptoFields :: forall (s :: S). Term s PTxInInfo -> Term s (PDataRecord (PFields PTxInInfo)) Source #

PDataFields PTxOut Source # 
Instance details

Defined in Plutarch.Api.V2.Tx

Associated Types

type PFields PTxOut :: [PLabeledType] Source #

Methods

ptoFields :: forall (s :: S). Term s PTxOut -> Term s (PDataRecord (PFields PTxOut)) Source #

PDataFields (PInterval a) Source # 
Instance details

Defined in Plutarch.Api.V1.Interval

Associated Types

type PFields (PInterval a) :: [PLabeledType] Source #

Methods

ptoFields :: forall (s :: S). Term s (PInterval a) -> Term s (PDataRecord (PFields (PInterval a))) Source #

PDataFields (PLowerBound a) Source # 
Instance details

Defined in Plutarch.Api.V1.Interval

Associated Types

type PFields (PLowerBound a) :: [PLabeledType] Source #

Methods

ptoFields :: forall (s :: S). Term s (PLowerBound a) -> Term s (PDataRecord (PFields (PLowerBound a))) Source #

PDataFields (PUpperBound a) Source # 
Instance details

Defined in Plutarch.Api.V1.Interval

Associated Types

type PFields (PUpperBound a) :: [PLabeledType] Source #

Methods

ptoFields :: forall (s :: S). Term s (PUpperBound a) -> Term s (PDataRecord (PFields (PUpperBound a))) Source #

(PIsData a, PDataFields a) => PDataFields (PAsData a) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal.Field

Associated Types

type PFields (PAsData a) :: [PLabeledType] Source #

Methods

ptoFields :: forall (s :: S). Term s (PAsData a) -> Term s (PDataRecord (PFields (PAsData a))) Source #

PDataFields (PDataRecord as) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal.Field

Associated Types

type PFields (PDataRecord as) :: [PLabeledType] Source #

Methods

ptoFields :: forall (s :: S). Term s (PDataRecord as) -> Term s (PDataRecord (PFields (PDataRecord as))) Source #

PDataFields (PDataSum '[as]) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal.Field

Associated Types

type PFields (PDataSum '[as]) :: [PLabeledType] Source #

Methods

ptoFields :: forall (s :: S). Term s (PDataSum '[as]) -> Term s (PDataRecord (PFields (PDataSum '[as]))) Source #

pletFields :: forall fs a s b ps bs. (PDataFields a, ps ~ PFields a, bs ~ Bindings ps fs, BindFields ps bs) => Term s a -> (HRecOf a fs s -> Term s b) -> Term s b Source #

Bind a HRec of named fields containing all the specified fields.

pfield :: forall name b p s a as n. (PDataFields p, as ~ PFields p, n ~ PLabelIndex name as, KnownNat n, a ~ PUnLabel (IndexList n as), PFromDataable a b) => Term s (p :--> b) Source #

Get a single field from a Term.

  • NB*: If you access more than one field from the same value you should use pletFields instead, which will generate the bindings more efficiently.

data HRec as Source #

Instances

Instances details
(IndexLabel name as ~ a, ElemOf name a as, Term s (PAsData b) ~ a, PFromDataable b c) => HasField (name :: Symbol) (HRec as) (Term s c) Source # 
Instance details

Defined in Plutarch.DataRepr.Internal.HList

Methods

getField :: HRec as -> Term s c Source #

type HRecOf t fs s = HRec (BoundTerms (PFields t) (Bindings (PFields t) fs) s) Source #

The HRec yielded by 'pletFields @fs t'.

type family PMemberFields t fs s as where ... Source #

Constrain an HRec to contain the specified fields from the given Plutarch type.

Example ===

import qualified GHC.Generics as GHC
import Generics.SOP

import Plutarch.Prelude
import Plutarch.DataRepr

newtype PFooType s = PFooType (Term s (PDataRecord '["frst" ':= PInteger, "scnd" ':= PBool, "thrd" ':= PString]))
  deriving stock (GHC.Generic)
  deriving anyclass (Generic)
  deriving anyclass (PIsDataRepr)
  deriving
    (PlutusType, PIsData, PDataFields, PEq)
    via PIsDataReprInstances PFooType

foo :: PMemberFields PFooType '["scnd", "frst"] s as => HRec as -> Term s PInteger
foo h = pif (getField "scnd" h) (getField "frst" h) 0

Equations

PMemberFields _ '[] _ _ = () 
PMemberFields t (name ': rest) s as = (PMemberField t name s as, PMemberFields t rest s as) 

type family PMemberField t name s as where ... Source #

Single field version of PMemberFields.

Equations

PMemberField t name s as = (IndexLabel name as ~ Term s (PAsData (PLookupLabel name (PFields t))), ElemOf name (Term s (PAsData (PLookupLabel name (PFields t)))) as)