| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
PlutusCore.Evaluation.Machine.Exception
Description
The exceptions that an abstract machine can throw.
Synopsis
- newtype UnliftingError = MkUnliftingError {}
- data BuiltinError
- data MachineError fun
- = NonPolymorphicInstantiationMachineError
- | NonWrapUnwrappedMachineError
- | NonFunctionalApplicationMachineError
- | OpenTermEvaluatedMachineError
- | UnliftingMachineError UnliftingError
- | BuiltinTermArgumentExpectedMachineError
- | UnexpectedBuiltinTermArgumentMachineError
- | NonConstrScrutinizedMachineError
- | MissingCaseBranchMachineError Word64
- | PanicMachineError String
- data EvaluationError structural operational
- = StructuralError !structural
- | OperationalError !operational
- data ErrorWithCause err cause = ErrorWithCause {}
- type EvaluationException structural operational = ErrorWithCause (EvaluationError structural operational)
- notAConstant :: BuiltinError
- throwErrorWithCause :: MonadError (ErrorWithCause e cause) m => e -> cause -> m x
- splitStructuralOperational :: Either (EvaluationException structural operational term) a -> Either (ErrorWithCause structural term) (EvaluationResult a)
- unsafeSplitStructuralOperational :: (PrettyPlc structural, PrettyPlc term, Typeable structural, Typeable term) => Either (EvaluationException structural operational term) a -> EvaluationResult a
- class BuiltinErrorToEvaluationError structural operational
- builtinErrorToEvaluationError :: BuiltinErrorToEvaluationError structural operational => BuiltinError -> EvaluationError structural operational
- throwBuiltinErrorWithCause :: (MonadError (EvaluationException structural operational cause) m, BuiltinErrorToEvaluationError structural operational) => cause -> BuiltinError -> m void
Documentation
newtype UnliftingError Source #
The error message part of an UnliftingEvaluationError.
Constructors
| MkUnliftingError | |
Fields | |
Instances
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 # | |
| 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 |
| NonConstrScrutinizedMachineError | An attempt to scrutinize a non-constr. |
| MissingCaseBranchMachineError Word64 | An attempt to go into a non-existent case branch. |
| PanicMachineError String | A GHC exception was thrown. |
Instances
data EvaluationError structural operational Source #
The type of errors that can occur during evaluation. There are two kinds of errors:
- 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
tailListwas applied to a non-list. - Operational ones -- these are errors that are indicative of the _logic_ of the program being
wrong. For example,
errorwas executed,tailListwas applied to an empty list or evaluation ran out of gas.
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, structural errors are "runtime type errors" and operational errors are regular runtime 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.
Constructors
| StructuralError !structural | |
| OperationalError !operational |
Instances
| Bifoldable EvaluationError Source # | |||||
Defined in PlutusCore.Evaluation.Error Methods bifold :: Monoid m => EvaluationError m m -> m Source # bifoldMap :: Monoid m => (a -> m) -> (b -> m) -> EvaluationError a b -> m Source # bifoldr :: (a -> c -> c) -> (b -> c -> c) -> c -> EvaluationError a b -> c Source # bifoldl :: (c -> a -> c) -> (c -> b -> c) -> c -> EvaluationError a b -> c Source # | |||||
| Bifunctor EvaluationError Source # | |||||
Defined in PlutusCore.Evaluation.Error Methods bimap :: (a -> b) -> (c -> d) -> EvaluationError a c -> EvaluationError b d Source # first :: (a -> b) -> EvaluationError a c -> EvaluationError b c Source # second :: (b -> c) -> EvaluationError a b -> EvaluationError a c Source # | |||||
| Bitraversable EvaluationError Source # | |||||
Defined in PlutusCore.Evaluation.Error Methods bitraverse :: Applicative f => (a -> f c) -> (b -> f d) -> EvaluationError a b -> f (EvaluationError c d) Source # | |||||
| (HasPrettyDefaults config ~ 'True, PrettyBy config structural, Pretty operational) => PrettyBy config (EvaluationError structural operational) Source # | |||||
Defined in PlutusCore.Evaluation.Error Methods prettyBy :: config -> EvaluationError structural operational -> Doc ann # prettyListBy :: config -> [EvaluationError structural operational] -> Doc ann # | |||||
| Functor (EvaluationError structural) Source # | |||||
Defined in PlutusCore.Evaluation.Error Methods fmap :: (a -> b) -> EvaluationError structural a -> EvaluationError structural b Source # (<$) :: a -> EvaluationError structural b -> EvaluationError structural a Source # | |||||
| Generic (EvaluationError structural operational) Source # | |||||
Defined in PlutusCore.Evaluation.Error Associated Types
Methods from :: EvaluationError structural operational -> Rep (EvaluationError structural operational) x Source # to :: Rep (EvaluationError structural operational) x -> EvaluationError structural operational Source # | |||||
| (Show structural, Show operational) => Show (EvaluationError structural operational) Source # | |||||
Defined in PlutusCore.Evaluation.Error | |||||
| (NFData structural, NFData operational) => NFData (EvaluationError structural operational) Source # | |||||
Defined in PlutusCore.Evaluation.Error Methods rnf :: EvaluationError structural operational -> () Source # | |||||
| (Eq structural, Eq operational) => Eq (EvaluationError structural operational) Source # | |||||
Defined in PlutusCore.Evaluation.Error Methods (==) :: EvaluationError structural operational -> EvaluationError structural operational -> Bool Source # (/=) :: EvaluationError structural operational -> EvaluationError structural operational -> Bool Source # | |||||
| (Pretty structural, Pretty operational) => Pretty (EvaluationError structural operational) Source # | |||||
Defined in PlutusCore.Evaluation.Error Methods pretty :: EvaluationError structural operational -> Doc ann # prettyList :: [EvaluationError structural operational] -> Doc ann # | |||||
| ThrowableBuiltins uni fun => MonadError (CekEvaluationException NamedDeBruijn uni fun) (CekM uni fun s) Source # | |||||
Defined in UntypedPlutusCore.Evaluation.Machine.Cek.Internal Methods throwError :: CekEvaluationException NamedDeBruijn uni fun -> CekM uni fun s a Source # catchError :: CekM uni fun s a -> (CekEvaluationException NamedDeBruijn uni fun -> CekM uni fun s a) -> CekM uni fun s a Source # | |||||
| type Rep (EvaluationError structural operational) Source # | |||||
Defined in PlutusCore.Evaluation.Error type Rep (EvaluationError structural operational) = D1 ('MetaData "EvaluationError" "PlutusCore.Evaluation.Error" "plutus-core-1.60.0.0-LXFqBsoUlXsJIEqLytHte7" 'False) (C1 ('MetaCons "StructuralError" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 structural)) :+: C1 ('MetaCons "OperationalError" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 operational))) | |||||
data ErrorWithCause err cause Source #
An error and (optionally) what caused it.
Constructors
| ErrorWithCause | |
Instances
| Bifunctor ErrorWithCause Source # | |||||
Defined in PlutusCore.Evaluation.ErrorWithCause Methods bimap :: (a -> b) -> (c -> d) -> ErrorWithCause a c -> ErrorWithCause b d Source # first :: (a -> b) -> ErrorWithCause a c -> ErrorWithCause b c Source # second :: (b -> c) -> ErrorWithCause a b -> ErrorWithCause a c Source # | |||||
| (PrettyBy config cause, PrettyBy config err) => PrettyBy config (ErrorWithCause err cause) Source # | |||||
Defined in PlutusCore.Evaluation.ErrorWithCause Methods prettyBy :: config -> ErrorWithCause err cause -> Doc ann # prettyListBy :: config -> [ErrorWithCause err cause] -> Doc ann # | |||||
| Foldable (ErrorWithCause err) Source # | |||||
Defined in PlutusCore.Evaluation.ErrorWithCause Methods fold :: Monoid m => ErrorWithCause err m -> m Source # foldMap :: Monoid m => (a -> m) -> ErrorWithCause err a -> m Source # foldMap' :: Monoid m => (a -> m) -> ErrorWithCause err a -> m Source # foldr :: (a -> b -> b) -> b -> ErrorWithCause err a -> b Source # foldr' :: (a -> b -> b) -> b -> ErrorWithCause err a -> b Source # foldl :: (b -> a -> b) -> b -> ErrorWithCause err a -> b Source # foldl' :: (b -> a -> b) -> b -> ErrorWithCause err a -> b Source # foldr1 :: (a -> a -> a) -> ErrorWithCause err a -> a Source # foldl1 :: (a -> a -> a) -> ErrorWithCause err a -> a Source # toList :: ErrorWithCause err a -> [a] Source # null :: ErrorWithCause err a -> Bool Source # length :: ErrorWithCause err a -> Int Source # elem :: Eq a => a -> ErrorWithCause err a -> Bool Source # maximum :: Ord a => ErrorWithCause err a -> a Source # minimum :: Ord a => ErrorWithCause err a -> a Source # sum :: Num a => ErrorWithCause err a -> a Source # product :: Num a => ErrorWithCause err a -> a Source # | |||||
| Traversable (ErrorWithCause err) Source # | |||||
Defined in PlutusCore.Evaluation.ErrorWithCause Methods traverse :: Applicative f => (a -> f b) -> ErrorWithCause err a -> f (ErrorWithCause err b) Source # sequenceA :: Applicative f => ErrorWithCause err (f a) -> f (ErrorWithCause err a) Source # mapM :: Monad m => (a -> m b) -> ErrorWithCause err a -> m (ErrorWithCause err b) Source # sequence :: Monad m => ErrorWithCause err (m a) -> m (ErrorWithCause err a) Source # | |||||
| Functor (ErrorWithCause err) Source # | |||||
Defined in PlutusCore.Evaluation.ErrorWithCause Methods fmap :: (a -> b) -> ErrorWithCause err a -> ErrorWithCause err b Source # (<$) :: a -> ErrorWithCause err b -> ErrorWithCause err a Source # | |||||
| (PrettyPlc cause, PrettyPlc err, Typeable cause, Typeable err) => Exception (ErrorWithCause err cause) Source # | |||||
Defined in PlutusCore.Evaluation.ErrorWithCause Methods toException :: ErrorWithCause err cause -> SomeException Source # fromException :: SomeException -> Maybe (ErrorWithCause err cause) Source # displayException :: ErrorWithCause err cause -> String Source # | |||||
| Generic (ErrorWithCause err cause) Source # | |||||
Defined in PlutusCore.Evaluation.ErrorWithCause Associated Types
Methods from :: ErrorWithCause err cause -> Rep (ErrorWithCause err cause) x Source # to :: Rep (ErrorWithCause err cause) x -> ErrorWithCause err cause Source # | |||||
| (PrettyPlc cause, PrettyPlc err) => Show (ErrorWithCause err cause) Source # | |||||
Defined in PlutusCore.Evaluation.ErrorWithCause | |||||
| (NFData err, NFData cause) => NFData (ErrorWithCause err cause) Source # | |||||
Defined in PlutusCore.Evaluation.ErrorWithCause Methods rnf :: ErrorWithCause err cause -> () Source # | |||||
| (Eq err, Eq cause) => Eq (ErrorWithCause err cause) Source # | |||||
Defined in PlutusCore.Evaluation.ErrorWithCause Methods (==) :: ErrorWithCause err cause -> ErrorWithCause err cause -> Bool Source # (/=) :: ErrorWithCause err cause -> ErrorWithCause err cause -> Bool Source # | |||||
| (Pretty err, Pretty cause) => Pretty (ErrorWithCause err cause) Source # | |||||
Defined in PlutusCore.Evaluation.ErrorWithCause Methods pretty :: ErrorWithCause err cause -> Doc ann # prettyList :: [ErrorWithCause err cause] -> Doc ann # | |||||
| ThrowableBuiltins uni fun => MonadError (CekEvaluationException NamedDeBruijn uni fun) (CekM uni fun s) Source # | |||||
Defined in UntypedPlutusCore.Evaluation.Machine.Cek.Internal Methods throwError :: CekEvaluationException NamedDeBruijn uni fun -> CekM uni fun s a Source # catchError :: CekM uni fun s a -> (CekEvaluationException NamedDeBruijn uni fun -> CekM uni fun s a) -> CekM uni fun s a Source # | |||||
| type Rep (ErrorWithCause err cause) Source # | |||||
Defined in PlutusCore.Evaluation.ErrorWithCause type Rep (ErrorWithCause err cause) = D1 ('MetaData "ErrorWithCause" "PlutusCore.Evaluation.ErrorWithCause" "plutus-core-1.60.0.0-LXFqBsoUlXsJIEqLytHte7" 'False) (C1 ('MetaCons "ErrorWithCause" 'PrefixI 'True) (S1 ('MetaSel ('Just "_ewcError") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 err) :*: S1 ('MetaSel ('Just "_ewcCause") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (Maybe cause)))) | |||||
type EvaluationException structural operational = ErrorWithCause (EvaluationError structural operational) Source #
throwErrorWithCause :: MonadError (ErrorWithCause e cause) m => e -> cause -> m x Source #
splitStructuralOperational :: Either (EvaluationException structural operational term) a -> Either (ErrorWithCause structural term) (EvaluationResult a) Source #
Preserve the contents of an StructuralError as a Left and turn an
OperationalError into a Right EvaluationFailure (thus erasing the content of the
error in the latter case).
unsafeSplitStructuralOperational :: (PrettyPlc structural, PrettyPlc term, Typeable structural, Typeable term) => Either (EvaluationException structural operational term) a -> EvaluationResult a Source #
Throw on a StructuralError and turn an OperationalError into an
EvaluationFailure (thus erasing the content of the error in the latter case).
class BuiltinErrorToEvaluationError structural operational Source #
Minimal complete definition
Instances
builtinErrorToEvaluationError :: BuiltinErrorToEvaluationError structural operational => BuiltinError -> EvaluationError structural operational Source #
throwBuiltinErrorWithCause :: (MonadError (EvaluationException structural operational cause) m, BuiltinErrorToEvaluationError structural operational) => cause -> BuiltinError -> m void Source #
Attach a cause to a BuiltinError and throw that.
Note that an evaluator might require the cause to be computed lazily for best performance on the
happy path, hence this function must not force its first argument.
TODO: wrap cause in Lazy once we have it.