-- SPDX-FileCopyrightText: 2022 Oxhead Alpha
-- SPDX-License-Identifier: LicenseRef-MIT-OA

-- | Helpers for working in @MonadCleveland@ context.
module Test.Cleveland.Internal.Actions.Helpers
  ( module Test.Cleveland.Internal.Actions.Helpers
  ) where

withCap :: Monad m => (caps -> cap) -> (cap -> m a) -> ReaderT caps m a
withCap :: forall (m :: * -> *) caps cap a.
Monad m =>
(caps -> cap) -> (cap -> m a) -> ReaderT caps m a
withCap caps -> cap
getCap cap -> m a
useCap = do
  cap
cap <- (caps -> cap) -> ReaderT caps m cap
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks caps -> cap
getCap
  m a -> ReaderT caps m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (m a -> ReaderT caps m a) -> m a -> ReaderT caps m a
forall a b. (a -> b) -> a -> b
$ cap -> m a
useCap cap
cap