-- |Monad reexports from @extra@ and some combinators
module Prelate.Control.Monad (
  module Prelate.Control.Monad,
  module Control.Monad.Extra,
) where

import Control.Monad.Extra (
  findM,
  firstJustM,
  pureIf,
  untilJustM,
  whenJust,
  whenJustM,
  whenMaybe,
  whenMaybeM,
  whileJustM,
  whileM,
  )

-- |Call a side-effecting function on a value and return the value.
tap ::
  Functor m =>
  (a -> m ()) ->
  a ->
  m a
tap :: forall (m :: * -> *) a. Functor m => (a -> m ()) -> a -> m a
tap a -> m ()
f a
a =
  a
a a -> m () -> m a
forall a b. a -> m b -> m a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ a -> m ()
f a
a
{-# inline tap #-}