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

UntypedPlutusCore.Purity

Synopsis

Documentation

isPureToBuiltinMeaning uni fun ⇒ BuiltinSemanticsVariant fun → Term name uni fun a → Bool Source #

Will evaluating this term have side effects (looping or error)? This is slightly wider than the definition of a value, as it includes applications that are known to be pure, as well as things that can't be returned from the machine (as they'd be ill-scoped).

isWorkFreeToBuiltinMeaning uni fun ⇒ BuiltinSemanticsVariant fun → Term name uni fun a → Bool Source #

Is the given term 'work-free'?

Note: The definition of 'work-free' is a little unclear, but the idea is that evaluating this term should do very a trivial amount of work.

data EvalOrder name uni fun a Source #

The order in which terms get evaluated, along with their purities.

Instances

Instances details
PrettyBy config (Term name uni fun a) ⇒ PrettyBy config (EvalOrder name uni fun a) Source # 
Instance details

Defined in UntypedPlutusCore.Purity

Methods

prettyBy ∷ config → EvalOrder name uni fun a → Doc ann Source #

prettyListBy ∷ config → [EvalOrder name uni fun a] → Doc ann Source #

Monoid (EvalOrder name uni fun a) Source # 
Instance details

Defined in UntypedPlutusCore.Purity

Methods

memptyEvalOrder name uni fun a Source #

mappendEvalOrder name uni fun a → EvalOrder name uni fun a → EvalOrder name uni fun a Source #

mconcat ∷ [EvalOrder name uni fun a] → EvalOrder name uni fun a Source #

Semigroup (EvalOrder name uni fun a) Source # 
Instance details

Defined in UntypedPlutusCore.Purity

Methods

(<>)EvalOrder name uni fun a → EvalOrder name uni fun a → EvalOrder name uni fun a Source #

sconcatNonEmpty (EvalOrder name uni fun a) → EvalOrder name uni fun a Source #

stimesIntegral b ⇒ b → EvalOrder name uni fun a → EvalOrder name uni fun a Source #

unEvalOrderEvalOrder name uni fun a → [EvalTerm name uni fun a] Source #

Get the evaluation order as a list of EvalTerms. Either terminates in a single Unknown, which means that we got to a point where evaluation continues but we don't know where; or terminates normally, in which case we actually got to the end of the evaluation order for the term.

data EvalTerm name uni fun a Source #

Either the "next" term to be evaluated, along with its Purity and WorkFreedom, or we don't know what comes next.

Constructors

Unknown 
EvalTerm Purity WorkFreedom (Term name uni fun a) 

Instances

Instances details
PrettyBy config (Term name uni fun a) ⇒ PrettyBy config (EvalTerm name uni fun a) Source # 
Instance details

Defined in UntypedPlutusCore.Purity

Methods

prettyBy ∷ config → EvalTerm name uni fun a → Doc ann Source #

prettyListBy ∷ config → [EvalTerm name uni fun a] → Doc ann Source #

(Show name, Everywhere uni Show, Show fun, Show a, GShow uni, Closed uni) ⇒ Show (EvalTerm name uni fun a) Source # 
Instance details

Defined in UntypedPlutusCore.Purity

Methods

showsPrecIntEvalTerm name uni fun a → ShowS Source #

showEvalTerm name uni fun a → String Source #

showList ∷ [EvalTerm name uni fun a] → ShowS Source #

Eq (Term name uni fun a) ⇒ Eq (EvalTerm name uni fun a) Source # 
Instance details

Defined in UntypedPlutusCore.Purity

Methods

(==)EvalTerm name uni fun a → EvalTerm name uni fun a → Bool Source #

(/=)EvalTerm name uni fun a → EvalTerm name uni fun a → Bool Source #

data Purity Source #

Is this pure? Either yes, or maybe not.

Constructors

MaybeImpure 
Pure 

Instances

Instances details
Show Purity Source # 
Instance details

Defined in UntypedPlutusCore.Purity

Eq Purity Source # 
Instance details

Defined in UntypedPlutusCore.Purity

Methods

(==)PurityPurityBool Source #

(/=)PurityPurityBool Source #

Pretty Purity Source # 
Instance details

Defined in UntypedPlutusCore.Purity

Methods

prettyPurityDoc ann Source #

prettyList ∷ [Purity] → Doc ann Source #

data WorkFreedom Source #

Is this term essentially work-free? Either yes, or maybe not.

Constructors

MaybeWork 
WorkFree 

Instances

Instances details
Show WorkFreedom Source # 
Instance details

Defined in UntypedPlutusCore.Purity

Eq WorkFreedom Source # 
Instance details

Defined in UntypedPlutusCore.Purity

Pretty WorkFreedom Source # 
Instance details

Defined in UntypedPlutusCore.Purity

Methods

prettyWorkFreedomDoc ann Source #

prettyList ∷ [WorkFreedom] → Doc ann Source #

termEvaluationOrder ∷ ∀ name uni fun a. ToBuiltinMeaning uni fun ⇒ BuiltinSemanticsVariant fun → Term name uni fun a → EvalOrder name uni fun a Source #

Given a term, return the order in which it and its sub-terms will be evaluated.

This aims to be a sound under-approximation: if we don't know, we just say Unknown. Typically there will be a sequence of terms that we do know, which will terminate in Unknown once we do something like call a function.

This makes some assumptions about the evaluator, in particular about the order in which we evaluate sub-terms, but these match the current evaluator and we are not planning on changing it.