Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
PlutusCore.Evaluation.Machine.Exception
Description
The exceptions that an abstract machine can throw.
Synopsis
- newtype UnliftingError = MkUnliftingError {}
- class AsUnliftingError r where
- _UnliftingError ∷ Prism' r UnliftingError
- _MkUnliftingError ∷ Prism' r Text
- data BuiltinError
- data MachineError fun
- = NonPolymorphicInstantiationMachineError
- | NonWrapUnwrappedMachineError
- | NonFunctionalApplicationMachineError
- | OpenTermEvaluatedMachineError
- | UnliftingMachineError UnliftingError
- | BuiltinTermArgumentExpectedMachineError
- | UnexpectedBuiltinTermArgumentMachineError
- | NonConstrScrutinized
- | MissingCaseBranch Word64
- class AsMachineError r fun | r → fun where
- _MachineError ∷ Prism' r (MachineError fun)
- _NonPolymorphicInstantiationMachineError ∷ Prism' r ()
- _NonWrapUnwrappedMachineError ∷ Prism' r ()
- _NonFunctionalApplicationMachineError ∷ Prism' r ()
- _OpenTermEvaluatedMachineError ∷ Prism' r ()
- _UnliftingMachineError ∷ Prism' r UnliftingError
- _BuiltinTermArgumentExpectedMachineError ∷ Prism' r ()
- _UnexpectedBuiltinTermArgumentMachineError ∷ Prism' r ()
- _NonConstrScrutinized ∷ Prism' r ()
- _MissingCaseBranch ∷ Prism' r Word64
- data EvaluationError operational structural
- = OperationalEvaluationError !operational
- | StructuralEvaluationError !structural
- class AsEvaluationError r operational structural | r → operational structural where
- _EvaluationError ∷ Prism' r (EvaluationError operational structural)
- _OperationalEvaluationError ∷ Prism' r operational
- _StructuralEvaluationError ∷ Prism' r structural
- data ErrorWithCause err cause = ErrorWithCause {}
- type EvaluationException operational structural = ErrorWithCause (EvaluationError operational structural)
- throwNotAConstant ∷ MonadError BuiltinError m ⇒ m void
- throwing ∷ MonadError e m ⇒ AReview e t → t → m x
- throwing_ ∷ MonadError e m ⇒ AReview e () → m x
- throwingWithCause ∷ ∀ exc e t term m x. (exc ~ ErrorWithCause e term, MonadError exc m) ⇒ AReview e t → t → Maybe term → m x
- extractEvaluationResult ∷ Either (EvaluationException operational structural term) a → Either (ErrorWithCause structural term) (EvaluationResult a)
- unsafeToEvaluationResult ∷ (PrettyPlc internal, PrettyPlc term, Typeable internal, Typeable term) ⇒ Either (EvaluationException user internal term) a → EvaluationResult a
Documentation
newtype UnliftingError Source #
The error message part of an UnliftingEvaluationError
.
Constructors
MkUnliftingError | |
Fields |
Instances
class AsUnliftingError r where Source #
Minimal complete definition
Instances
AsUnliftingError UnliftingError Source # | |
Defined in PlutusCore.Builtin.Result Methods _UnliftingError ∷ Prism' UnliftingError UnliftingError Source # _MkUnliftingError ∷ Prism' UnliftingError Text Source # | |
AsUnliftingError CekUserError Source # | |
Defined in UntypedPlutusCore.Evaluation.Machine.Cek.Internal Methods _UnliftingError ∷ Prism' CekUserError UnliftingError Source # _MkUnliftingError ∷ Prism' CekUserError Text Source # | |
AsUnliftingError (MachineError fun) Source # | |
Defined in PlutusCore.Evaluation.Machine.Exception Methods _UnliftingError ∷ Prism' (MachineError fun) UnliftingError Source # _MkUnliftingError ∷ Prism' (MachineError fun) Text Source # |
data BuiltinError Source #
The type of errors that readKnown
and makeKnown
can return.
Instances
Show BuiltinError Source # | |
Defined in PlutusCore.Builtin.Result | |
Eq BuiltinError Source # | |
Defined in PlutusCore.Builtin.Result Methods (==) ∷ BuiltinError → BuiltinError → Bool Source # (/=) ∷ BuiltinError → BuiltinError → Bool Source # | |
AsBuiltinError BuiltinError Source # | |
Defined in PlutusCore.Builtin.Result Methods _BuiltinError ∷ Prism' BuiltinError BuiltinError Source # _BuiltinUnliftingEvaluationError ∷ Prism' BuiltinError UnliftingEvaluationError Source # _BuiltinEvaluationFailure ∷ Prism' BuiltinError () Source # | |
AsUnliftingEvaluationError BuiltinError Source # | |
Defined in PlutusCore.Builtin.Result | |
AsEvaluationFailure BuiltinError Source # | |
Defined in PlutusCore.Builtin.Result Methods _EvaluationFailure ∷ Prism' BuiltinError () Source # | |
Pretty BuiltinError Source # | |
Defined in PlutusCore.Builtin.Result | |
MonadError BuiltinError BuiltinResult Source # |
|
Defined in PlutusCore.Builtin.Result Methods throwError ∷ BuiltinError → BuiltinResult a Source # catchError ∷ BuiltinResult a → (BuiltinError → BuiltinResult a) → BuiltinResult a Source # |
data MachineError fun Source #
Errors which can occur during a run of an abstract machine.
Constructors
NonPolymorphicInstantiationMachineError | An attempt to reduce a not immediately reducible type instantiation. |
NonWrapUnwrappedMachineError | An attempt to unwrap a not wrapped term. |
NonFunctionalApplicationMachineError | An attempt to reduce a not immediately reducible application. |
OpenTermEvaluatedMachineError | An attempt to evaluate an open term. |
UnliftingMachineError UnliftingError | An attempt to compute a constant application resulted in |
BuiltinTermArgumentExpectedMachineError | A builtin expected a term argument, but something else was received. |
UnexpectedBuiltinTermArgumentMachineError | A builtin received a term argument when something else was expected |
NonConstrScrutinized | |
MissingCaseBranch Word64 |
Instances
class AsMachineError r fun | r → fun where Source #
Minimal complete definition
Methods
_MachineError ∷ Prism' r (MachineError fun) Source #
_NonPolymorphicInstantiationMachineError ∷ Prism' r () Source #
_NonWrapUnwrappedMachineError ∷ Prism' r () Source #
_NonFunctionalApplicationMachineError ∷ Prism' r () Source #
_OpenTermEvaluatedMachineError ∷ Prism' r () Source #
_UnliftingMachineError ∷ Prism' r UnliftingError Source #
_BuiltinTermArgumentExpectedMachineError ∷ Prism' r () Source #
_UnexpectedBuiltinTermArgumentMachineError ∷ Prism' r () Source #
_NonConstrScrutinized ∷ Prism' r () Source #
_MissingCaseBranch ∷ Prism' r Word64 Source #
Instances
data EvaluationError operational structural Source #
The type of errors that can occur during evaluation. There are two kinds of errors:
- Operational ones -- these are errors that are indicative of the _logic_ of the program being
wrong. For example,
error
was executed,tailList
was applied to an empty list or evaluation ran out of gas. - Structural ones -- these are errors that are indicative of the _structure_ of the program being
wrong. For example, a free variable was encountered during evaluation, a non-function was
applied to an argument or
tailList
was applied to a non-list.
On the chain both of these are just regular failures and we don't distinguish between them there: if a script fails, it fails, it doesn't matter what the reason was. However in the tests it does matter why the failure occurred: a structural error may indicate that the test was written incorrectly while an operational error may be entirely expected.
In other words, operational errors are regular runtime errors and structural errors are "runtime type errors". Which means that evaluating an (erased) well-typed program should never produce a structural error, only an operational one. This creates a sort of "runtime type system" for UPLC and it would be great to stick to it and enforce in tests etc, but we currently don't. For example, a built-in function expecting a list but getting something else should throw a structural error, but currently it'll throw an operational one. This is something that we plan to improve upon in future.
Constructors
OperationalEvaluationError !operational | |
StructuralEvaluationError !structural |
Instances
class AsEvaluationError r operational structural | r → operational structural where Source #
Minimal complete definition
Methods
_EvaluationError ∷ Prism' r (EvaluationError operational structural) Source #
_OperationalEvaluationError ∷ Prism' r operational Source #
_StructuralEvaluationError ∷ Prism' r structural Source #
Instances
AsEvaluationError UnliftingEvaluationError UnliftingError UnliftingError Source # | |
Defined in PlutusCore.Builtin.Result | |
AsEvaluationError (EvaluationError operational structural) operational structural Source # | |
Defined in PlutusCore.Evaluation.Error Methods _EvaluationError ∷ Prism' (EvaluationError operational structural) (EvaluationError operational structural) Source # _OperationalEvaluationError ∷ Prism' (EvaluationError operational structural) operational Source # _StructuralEvaluationError ∷ Prism' (EvaluationError operational structural) structural Source # |
data ErrorWithCause err cause Source #
An error and (optionally) what caused it.
Constructors
ErrorWithCause | |
Instances
type EvaluationException operational structural = ErrorWithCause (EvaluationError operational structural) Source #
throwNotAConstant ∷ MonadError BuiltinError m ⇒ m void Source #
throwing ∷ MonadError e m ⇒ AReview e t → t → m x #
throwing_ ∷ MonadError e m ⇒ AReview e () → m x #
throwingWithCause ∷ ∀ exc e t term m x. (exc ~ ErrorWithCause e term, MonadError exc m) ⇒ AReview e t → t → Maybe term → m x Source #
Prismatically throw an error and its (optional) cause.
extractEvaluationResult ∷ Either (EvaluationException operational structural term) a → Either (ErrorWithCause structural term) (EvaluationResult a) Source #
Preserve the contents of an StructuralEvaluationError
as a Left
and turn an
OperationalEvaluationError
into a Right EvaluationFailure
.
unsafeToEvaluationResult ∷ (PrettyPlc internal, PrettyPlc term, Typeable internal, Typeable term) ⇒ Either (EvaluationException user internal term) a → EvaluationResult a Source #
Throw on a StructuralEvaluationError
and turn an OperationalEvaluationError
into an
EvaluationFailure
.