@@ -5,31 +5,42 @@ module Cardano.Wasm.Internal.ExceptionHandling where
55
66import Control.Exception (Exception , displayException )
77import Control.Monad.Catch (MonadThrow (.. ))
8- import GHC.Exception (CallStack , prettyCallStack )
8+ import GHC.Exception (prettyCallStack )
99import GHC.Stack (HasCallStack , callStack , withFrozenCallStack )
1010
11- data ExpectedJustException = HasCallStack => ExpectedJustException CallStack String
11+ data ExpectedJustException = HasCallStack => ExpectedJustException String
1212
1313instance Show ExpectedJustException where
1414 show :: ExpectedJustException -> String
15- show (ExpectedJustException cs msg) = " Expected Just, got Nothing: " ++ msg ++ " \n " ++ prettyCallStack cs
15+ show (ExpectedJustException msg) = " Expected Just, got Nothing: " ++ msg ++ " \n " ++ prettyCallStack callStack
1616
1717instance Exception ExpectedJustException
1818
19- data ExpectedRightException = HasCallStack => ExpectedRightException CallStack String
19+ data ExpectedRightException = HasCallStack => ExpectedRightException String
2020
2121instance Show ExpectedRightException where
2222 show :: ExpectedRightException -> String
23- show (ExpectedRightException cs msg) = " Expected Right, got Left: " ++ msg ++ " \n " ++ prettyCallStack cs
23+ show (ExpectedRightException msg) = " Expected Right, got Left: " ++ msg ++ " \n " ++ prettyCallStack callStack
2424
2525instance Exception ExpectedRightException
2626
27+ data CustomException = HasCallStack => CustomException String
28+
29+ instance Show CustomException where
30+ show :: CustomException -> String
31+ show (CustomException msg) = " Custom exception: " ++ msg ++ " \n " ++ prettyCallStack callStack
32+
33+ instance Exception CustomException
34+
35+ throwError :: (HasCallStack , MonadThrow m ) => String -> m a
36+ throwError e = withFrozenCallStack $ throwM $ CustomException e
37+
2738justOrError :: (HasCallStack , MonadThrow m ) => String -> Maybe a -> m a
28- justOrError e Nothing = withFrozenCallStack $ throwM $ ExpectedJustException callStack e
39+ justOrError e Nothing = withFrozenCallStack $ throwM $ ExpectedJustException e
2940justOrError _ (Just a) = return a
3041
3142rightOrError :: (HasCallStack , MonadThrow m , Show e ) => Either e a -> m a
32- rightOrError (Left e) = withFrozenCallStack $ throwM $ ExpectedRightException callStack $ show e
43+ rightOrError (Left e) = withFrozenCallStack $ throwM $ ExpectedRightException $ show e
3344rightOrError (Right a) = return a
3445
3546-- | Convert an 'Either' value to a 'MonadFail' monad. This can be useful for converting
0 commit comments