-- | Provides an effect for sending system notifications.
module Navi.Effects.MonadNotify
  ( MonadNotify (..),
  )
where

import Navi.Data.NaviNote (NaviNote)
import Navi.Prelude

{- HLINT ignore MonadNotify "Redundant bracket" -}

-- | This class represents sending desktop notifications.
class (Monad m) => MonadNotify m where
  sendNote :: (HasCallStack) => NaviNote -> m ()

instance (MonadNotify m) => MonadNotify (ReaderT e m) where
  sendNote :: HasCallStack => NaviNote -> ReaderT e m ()
sendNote = m () -> ReaderT e m ()
forall (m :: Type -> Type) a. Monad m => m a -> ReaderT e m a
forall (t :: (Type -> Type) -> Type -> Type) (m :: Type -> Type) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (m () -> ReaderT e m ())
-> (NaviNote -> m ()) -> NaviNote -> ReaderT e m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> Type) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. NaviNote -> m ()
forall (m :: Type -> Type).
(MonadNotify m, HasCallStack) =>
NaviNote -> m ()
sendNote
  {-# INLINEABLE sendNote #-}