Skip to content

Commit

Permalink
base: Fix MonadError e (MonadBlockchainCardanoNodeT e m) instance (j-…
Browse files Browse the repository at this point in the history
  • Loading branch information
j-mueller authored Dec 19, 2023
1 parent 54f1648 commit ed17cd1
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 5 deletions.
1 change: 1 addition & 0 deletions changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- The balancing algorithm now correctly calculates the number of required signatures when computing the transaction fee
- Deleted spurious `runQuery'` log messages
- The constraints for most of the functions in `Convex.CoinSelection` have changed from `MonadFail m` to `MonadError BalanceTxError m`, allowing for better error handling
- Relaxed the `MonadError` instance of `MonadBlockchainCardanoNodeT` by removing the `MonadError e m` constraint; fixed the implementation of `catchError`

### Added

Expand Down
9 changes: 4 additions & 5 deletions src/base/lib/Convex/Class.hs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ import Control.Monad.Reader (MonadTrans,
lift)
import qualified Control.Monad.State as LazyState
import qualified Control.Monad.State.Strict as StrictState
import Control.Monad.Trans.Except (ExceptT)
import Control.Monad.Trans.Except (ExceptT (..))
import Control.Monad.Trans.Except.Result (ResultT)
import Convex.Constants (ERA)
import Convex.MonadLog (MonadLog (..),
Expand Down Expand Up @@ -226,10 +226,9 @@ instance Show e => Show (MonadBlockchainError e) where
newtype MonadBlockchainCardanoNodeT e m a = MonadBlockchainCardanoNodeT { unMonadBlockchainCardanoNodeT :: ReaderT (LocalNodeConnectInfo CardanoMode) (ExceptT (MonadBlockchainError e) m) a }
deriving newtype (Functor, Applicative, Monad, MonadIO)

instance MonadError e m => MonadError e (MonadBlockchainCardanoNodeT e m) where
throwError = lift . throwError
catchError m _ = m

instance Monad m => MonadError e (MonadBlockchainCardanoNodeT e m) where
throwError = MonadBlockchainCardanoNodeT . throwError . MonadBlockchainError
catchError (MonadBlockchainCardanoNodeT action) handler = MonadBlockchainCardanoNodeT $ catchError action (\case { MonadBlockchainError e -> unMonadBlockchainCardanoNodeT (handler e); e' -> throwError e' })

runMonadBlockchainCardanoNodeT :: LocalNodeConnectInfo CardanoMode -> MonadBlockchainCardanoNodeT e m a -> m (Either (MonadBlockchainError e) a)
runMonadBlockchainCardanoNodeT info (MonadBlockchainCardanoNodeT action) = runExceptT (runReaderT action info)
Expand Down

0 comments on commit ed17cd1

Please sign in to comment.