module Optics.Polysemy.Writer ( glistening , glistenings ) where import Optics ( Optic' , ViewResult , ViewableOptic ) import qualified Optics import Polysemy import Polysemy.Writer glistening :: (ViewableOptic k r, Member (Writer s) effs) => Optic' k is s r -> Sem effs a -> Sem effs (a, ViewResult k r) glistening :: Optic' k is s r -> Sem effs a -> Sem effs (a, ViewResult k r) glistening Optic' k is s r o Sem effs a m = do (s s, a a) <- Sem effs a -> Sem effs (s, a) forall o (r :: EffectRow) a. Member (Writer o) r => Sem r a -> Sem r (o, a) listen Sem effs a m (a, ViewResult k r) -> Sem effs (a, ViewResult k r) forall (m :: * -> *) a. Monad m => a -> m a return (a a, Optic' k is s r -> s -> ViewResult k r forall k r s (m :: * -> *) (is :: IxList). (ViewableOptic k r, MonadReader s m) => Optic' k is s r -> m (ViewResult k r) Optics.gview Optic' k is s r o s s) {-# INLINE glistening #-} glistenings :: (ViewableOptic k r, Member (Writer s) effs) => Optic' k is s a -> (a -> r) -> Sem effs b -> Sem effs (b, ViewResult k r) glistenings :: Optic' k is s a -> (a -> r) -> Sem effs b -> Sem effs (b, ViewResult k r) glistenings Optic' k is s a o a -> r f Sem effs b m = do (s s, b b) <- Sem effs b -> Sem effs (s, b) forall o (r :: EffectRow) a. Member (Writer o) r => Sem r a -> Sem r (o, a) listen Sem effs b m (b, ViewResult k r) -> Sem effs (b, ViewResult k r) forall (m :: * -> *) a. Monad m => a -> m a return (b b, Optic' k is s a -> (a -> r) -> s -> ViewResult k r forall k r s (m :: * -> *) (is :: IxList) a. (ViewableOptic k r, MonadReader s m) => Optic' k is s a -> (a -> r) -> m (ViewResult k r) Optics.gviews Optic' k is s a o a -> r f s s) {-# INLINE glistenings #-}