plutus-core-1.36.0.0: Language library for Plutus Core
Safe HaskellSafe-Inferred
LanguageHaskell2010

PlutusCore.Evaluation.Machine.ExMemoryUsage

Synopsis

Documentation

data CostRose Source #

A lazy tree of costs. Convenient for calculating the costs of values of built-in types, because they may have arbitrary branching (in particular a Data object can contain a list of Data objects inside of it).

CostRose gets collapsed to a lazy linear structure down the pipeline, so that we can stream the costs to the outside where, say, the CEK machine picks them up one by one and handles somehow (in particular, subtracts from the remaining budget).

Constructors

CostRose !CostingInteger ![CostRose] 

Instances

Instances details
Show CostRose Source # 
Instance details

Defined in PlutusCore.Evaluation.Machine.ExMemoryUsage

singletonRose :: CostingInteger -> CostRose Source #

Create a CostRose containing a single cost.

class ExMemoryUsage a where Source #

Methods

memoryUsage :: a -> CostRose Source #

Instances

Instances details
ExMemoryUsage Word8 Source # 
Instance details

Defined in PlutusCore.Evaluation.Machine.ExMemoryUsage

ExMemoryUsage ByteString Source # 
Instance details

Defined in PlutusCore.Evaluation.Machine.ExMemoryUsage

ExMemoryUsage Element Source # 
Instance details

Defined in PlutusCore.Evaluation.Machine.ExMemoryUsage

ExMemoryUsage Element Source # 
Instance details

Defined in PlutusCore.Evaluation.Machine.ExMemoryUsage

ExMemoryUsage MlResult Source # 
Instance details

Defined in PlutusCore.Evaluation.Machine.ExMemoryUsage

ExMemoryUsage Data Source # 
Instance details

Defined in PlutusCore.Evaluation.Machine.ExMemoryUsage

ExMemoryUsage DefaultFun Source # 
Instance details

Defined in PlutusCore.Default.Builtins

ExMemoryUsage IntegerCostedLiterally Source # 
Instance details

Defined in PlutusCore.Evaluation.Machine.ExMemoryUsage

ExMemoryUsage NumBytesCostedAsNumWords Source # 
Instance details

Defined in PlutusCore.Evaluation.Machine.ExMemoryUsage

ExMemoryUsage Text Source # 
Instance details

Defined in PlutusCore.Evaluation.Machine.ExMemoryUsage

ExMemoryUsage Integer Source # 
Instance details

Defined in PlutusCore.Evaluation.Machine.ExMemoryUsage

ExMemoryUsage Natural Source # 
Instance details

Defined in PlutusCore.Evaluation.Machine.ExMemoryUsage

ExMemoryUsage () Source # 
Instance details

Defined in PlutusCore.Evaluation.Machine.ExMemoryUsage

Methods

memoryUsage :: () -> CostRose Source #

ExMemoryUsage Bool Source # 
Instance details

Defined in PlutusCore.Evaluation.Machine.ExMemoryUsage

ExMemoryUsage Char Source # 
Instance details

Defined in PlutusCore.Evaluation.Machine.ExMemoryUsage

ExMemoryUsage Int Source # 
Instance details

Defined in PlutusCore.Evaluation.Machine.ExMemoryUsage

ExMemoryUsage (ListCostedByLength a) Source # 
Instance details

Defined in PlutusCore.Evaluation.Machine.ExMemoryUsage

ExMemoryUsage a => ExMemoryUsage [a] Source # 
Instance details

Defined in PlutusCore.Evaluation.Machine.ExMemoryUsage

Methods

memoryUsage :: [a] -> CostRose Source #

ExMemoryUsage val => ExMemoryUsage (Opaque val rep) Source # 
Instance details

Defined in PlutusCore.Builtin.Polymorphism

Methods

memoryUsage :: Opaque val rep -> CostRose Source #

(Everywhere uni ExMemoryUsage, Closed uni) => ExMemoryUsage (SomeConstant uni rep) Source # 
Instance details

Defined in PlutusCore.Builtin.Polymorphism

ExMemoryUsage (CkValue uni fun) Source # 
Instance details

Defined in PlutusCore.Evaluation.Machine.Ck

Methods

memoryUsage :: CkValue uni fun -> CostRose Source #

(Closed uni, Everywhere uni ExMemoryUsage) => ExMemoryUsage (Some (ValueOf uni)) Source # 
Instance details

Defined in PlutusCore.Evaluation.Machine.ExMemoryUsage

(ExMemoryUsage a, ExMemoryUsage b) => ExMemoryUsage (a, b) Source # 
Instance details

Defined in PlutusCore.Evaluation.Machine.ExMemoryUsage

Methods

memoryUsage :: (a, b) -> CostRose Source #

(Closed uni, Everywhere uni ExMemoryUsage) => ExMemoryUsage (CekValue uni fun ann) Source # 
Instance details

Defined in UntypedPlutusCore.Evaluation.Machine.Cek.Internal

Methods

memoryUsage :: CekValue uni fun ann -> CostRose Source #

ExMemoryUsage (Term tyname name uni fun ann) Source # 
Instance details

Defined in PlutusCore.Core.Type

Methods

memoryUsage :: Term tyname name uni fun ann -> CostRose Source #

flattenCostRose :: CostRose -> CostStream Source #

Collapse a CostRose to a lazy linear stream of costs. Retrieving the next element takes O(1) time in the worst case regardless of the recursion pattern of the given CostRose.

newtype NumBytesCostedAsNumWords Source #

When invoking a built-in function, a value of type NumBytesCostedAsNumWords can be used transparently as a built-in Integer but with a different size measure: see Note [Integral types as Integer]. This is required by the integerToByteString builtin, which takes an argument w specifying the width (in bytes) of the output bytestring (zero-padded to the desired size). The memory consumed by the function is given by w, *not* the size of w. The NumBytesCostedAsNumWords type wraps an Int w in a newtype whose ExMemoryUsage is equal to the number of eight-byte words required to contain w bytes, allowing its costing function to work properly. We also use this for replicateByte. If this is used to wrap an argument in the denotation of a builtin then it *MUST* also be used to wrap the same argument in the relevant budgeting benchmark.

Instances

Instances details
ExMemoryUsage NumBytesCostedAsNumWords Source # 
Instance details

Defined in PlutusCore.Evaluation.Machine.ExMemoryUsage

KnownBuiltinTypeIn DefaultUni term Integer => MakeKnownIn DefaultUni term NumBytesCostedAsNumWords Source # 
Instance details

Defined in PlutusCore.Default.Universe

KnownBuiltinTypeIn DefaultUni term Integer => ReadKnownIn DefaultUni term NumBytesCostedAsNumWords Source # 
Instance details

Defined in PlutusCore.Default.Universe

KnownTypeAst tyname DefaultUni NumBytesCostedAsNumWords Source # 
Instance details

Defined in PlutusCore.Default.Universe

Methods

typeAst :: Type tyname DefaultUni () Source #

type IsBuiltin DefaultUni NumBytesCostedAsNumWords Source # 
Instance details

Defined in PlutusCore.Default.Universe

type ToHoles DefaultUni NumBytesCostedAsNumWords Source # 
Instance details

Defined in PlutusCore.Default.Universe

type ToBinds DefaultUni acc NumBytesCostedAsNumWords Source # 
Instance details

Defined in PlutusCore.Default.Universe

newtype IntegerCostedLiterally Source #

A wrapper for Integers whose "memory usage" for costing purposes is the absolute value of the Integer. This is used for costing built-in functions such as shiftByteString and rotateByteString, where the cost may depend on the actual value of the shift argument, not its size. If this is used to wrap an argument in the denotation of a builtin then it *MUST* also be used to wrap the same argument in the relevant budgeting benchmark.

Instances

Instances details
ExMemoryUsage IntegerCostedLiterally Source # 
Instance details

Defined in PlutusCore.Evaluation.Machine.ExMemoryUsage

KnownBuiltinTypeIn DefaultUni term Integer => MakeKnownIn DefaultUni term IntegerCostedLiterally Source # 
Instance details

Defined in PlutusCore.Default.Universe

KnownBuiltinTypeIn DefaultUni term Integer => ReadKnownIn DefaultUni term IntegerCostedLiterally Source # 
Instance details

Defined in PlutusCore.Default.Universe

KnownTypeAst tyname DefaultUni IntegerCostedLiterally Source # 
Instance details

Defined in PlutusCore.Default.Universe

Methods

typeAst :: Type tyname DefaultUni () Source #

type IsBuiltin DefaultUni IntegerCostedLiterally Source # 
Instance details

Defined in PlutusCore.Default.Universe

type ToHoles DefaultUni IntegerCostedLiterally Source # 
Instance details

Defined in PlutusCore.Default.Universe

type ToBinds DefaultUni acc IntegerCostedLiterally Source # 
Instance details

Defined in PlutusCore.Default.Universe

newtype ListCostedByLength a Source #

A wrappper for lists whose "memory usage" for costing purposes is just the length of the list, ignoring the sizes of the elements. If this is used to wrap an argument in the denotation of a builtin then it *MUST* also be used to wrap the same argument in the relevant budgeting benchmark.

Constructors

ListCostedByLength 

Fields

Instances

Instances details
KnownTypeAst tyname DefaultUni a => KnownTypeAst tyname DefaultUni (ListCostedByLength a :: Type) Source # 
Instance details

Defined in PlutusCore.Default.Universe

Methods

typeAst :: Type0 tyname DefaultUni () Source #

KnownBuiltinTypeIn DefaultUni term [a] => MakeKnownIn DefaultUni term (ListCostedByLength a) Source # 
Instance details

Defined in PlutusCore.Default.Universe

KnownBuiltinTypeIn DefaultUni term [a] => ReadKnownIn DefaultUni term (ListCostedByLength a) Source # 
Instance details

Defined in PlutusCore.Default.Universe

ExMemoryUsage (ListCostedByLength a) Source # 
Instance details

Defined in PlutusCore.Evaluation.Machine.ExMemoryUsage

type ToBinds DefaultUni acc (ListCostedByLength a :: Type) Source # 
Instance details

Defined in PlutusCore.Default.Universe

type IsBuiltin DefaultUni (ListCostedByLength a :: Type) Source # 
Instance details

Defined in PlutusCore.Default.Universe

type ToHoles DefaultUni (ListCostedByLength a :: Type) Source # 
Instance details

Defined in PlutusCore.Default.Universe