| Safe Haskell | Safe-Inferred | 
|---|---|
| Language | Haskell2010 | 
PlutusCore.Evaluation.Machine.ExMemoryUsage
Synopsis
- data CostRose = CostRose !CostingInteger ![CostRose]
- singletonRose ∷ CostingInteger → CostRose
- class ExMemoryUsage a where- memoryUsage ∷ a → CostRose
 
- flattenCostRose ∷ CostRose → CostStream
- newtype NumBytesCostedAsNumWords = NumBytesCostedAsNumWords {}
- newtype IntegerCostedLiterally = IntegerCostedLiterally {}
- newtype ValueTotalSize = ValueTotalSize {}
- newtype ValueOuterOrMaxInner = ValueOuterOrMaxInner {}
Documentation
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] | 
singletonRose ∷ CostingInteger → CostRose Source #
Create a CostRose containing a single cost.
class ExMemoryUsage a where Source #
Methods
memoryUsage ∷ a → CostRose Source #
Instances
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.
Constructors
| NumBytesCostedAsNumWords | |
| Fields | |
Instances
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.
Constructors
| IntegerCostedLiterally | |
| Fields | |
Instances
newtype ValueTotalSize Source #
Constructors
| ValueTotalSize | |
| Fields | |
Instances
| ExMemoryUsage ValueTotalSize Source # | |
| Defined in PlutusCore.Evaluation.Machine.ExMemoryUsage Methods | |
newtype ValueOuterOrMaxInner Source #
Measure the size of a Value by taking the max of
 (size of the outer map, size of the largest inner map).
Constructors
| ValueOuterOrMaxInner | |
| Fields | |