Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Exception handling
Synopsis
- attempt :: forall e caps m a. (HasCallStack, MonadCleveland caps m, Exception e) => m a -> m (Either e a)
- catchTransferFailure :: (HasCallStack, MonadCleveland caps m) => m a -> m TransferFailure
- expectTransferFailure :: (HasCallStack, MonadCleveland caps m) => TransferFailurePredicate -> m a -> m ()
- checkTransferFailure :: (HasCallStack, MonadCleveland caps m) => TransferFailure -> TransferFailurePredicate -> m ()
- expectFailedWith :: forall err a caps m. (HasCallStack, MonadCleveland caps m, NiceConstant err) => err -> m a -> m ()
- expectError :: forall err a caps m. (HasCallStack, MonadCleveland caps m, IsError err) => err -> m a -> m ()
- expectCustomError :: forall arg a tag caps m. (HasCallStack, MonadCleveland caps m, IsError (CustomError tag), MustHaveErrorArg tag (MText, arg)) => Label tag -> arg -> m a -> m ()
- expectCustomError_ :: (HasCallStack, MonadCleveland caps m, IsError (CustomError tag), MustHaveErrorArg tag (MText, ())) => Label tag -> m a -> m ()
- expectCustomErrorNoArg :: (HasCallStack, MonadCleveland caps m, IsError (CustomError tag), MustHaveErrorArg tag MText) => Label tag -> m a -> m ()
- expectCustomErrorAnyArg :: (HasCallStack, MonadCleveland caps m) => Label tag -> m a -> m ()
- expectNumericError :: forall err a caps m. (HasCallStack, MonadCleveland caps m, IsError err) => ErrorTagMap -> err -> m a -> m ()
- clarifyErrors :: forall caps m a. MonadCleveland caps m => Doc -> m a -> m a
Documentation
attempt :: forall e caps m a. (HasCallStack, MonadCleveland caps m, Exception e) => m a -> m (Either e a) Source #
Attempt to run an action and return its result or, if interpretation fails, an error.
catchTransferFailure :: (HasCallStack, MonadCleveland caps m) => m a -> m TransferFailure Source #
Asserts that a transfer should fail, and returns the exception.
expectTransferFailure :: (HasCallStack, MonadCleveland caps m) => TransferFailurePredicate -> m a -> m () Source #
Asserts that a transfer should fail, and runs some TransferFailurePredicate
s over the
exception.
expectTransferFailure (failedWith (constant @MText "NOT_ADMIN")) $ call contractAddr (Call @"Ep") arg
call contractAddr (Call @"Ep") arg & expectTransferFailure ( failedWith (customError #tag 3) && addressIs contractAddr )
checkTransferFailure :: (HasCallStack, MonadCleveland caps m) => TransferFailure -> TransferFailurePredicate -> m () Source #
Check whether a given predicate holds for a given TransferFailure
.
expectFailedWith :: forall err a caps m. (HasCallStack, MonadCleveland caps m, NiceConstant err) => err -> m a -> m () Source #
Asserts that interpretation of a contract ended with FAILWITH
, returning the given constant
value.
expectError :: forall err a caps m. (HasCallStack, MonadCleveland caps m, IsError err) => err -> m a -> m () Source #
Asserts that interpretation of a contract ended with FAILWITH
, returning the given lorentz
error.
expectCustomError :: forall arg a tag caps m. (HasCallStack, MonadCleveland caps m, IsError (CustomError tag), MustHaveErrorArg tag (MText, arg)) => Label tag -> arg -> m a -> m () Source #
Asserts that interpretation of a contract ended with FAILWITH
, returning the given custom
lorentz error.
expectCustomError_ :: (HasCallStack, MonadCleveland caps m, IsError (CustomError tag), MustHaveErrorArg tag (MText, ())) => Label tag -> m a -> m () Source #
Version of expectCustomError
for error with unit
argument.
expectCustomErrorNoArg :: (HasCallStack, MonadCleveland caps m, IsError (CustomError tag), MustHaveErrorArg tag MText) => Label tag -> m a -> m () Source #
Version of expectCustomError
specialized for expecting NoErrorArg
s.
expectCustomErrorAnyArg :: (HasCallStack, MonadCleveland caps m) => Label tag -> m a -> m () Source #
Version of expectCustomError
that ignores the argument (or whether it
even exists) and only checks the tag.
expectNumericError :: forall err a caps m. (HasCallStack, MonadCleveland caps m, IsError err) => ErrorTagMap -> err -> m a -> m () Source #
Asserts that interpretation of a contract ended with FAILWITH
, returning the given lorentz
numeric error.
clarifyErrors :: forall caps m a. MonadCleveland caps m => Doc -> m a -> m a Source #
Prefix error messages potentially thrown from the given code block.
The prefix will be put at a separate line before the main text, if text is multiline, otherwise
it will be separated from the main text with :
.
This affects errors produced by functions like failure
, assert
, @==
, etc.
Errors related to events in the chain will not be touched.
Example:
for [1..10] \i -> clarifyErrors ("For i=" +| i |+ "") $ askContract i @@== i * 2