module Optics.Polysemy.Reader ( gview , gviews ) where import Optics ( Optic' , ViewResult , ViewableOptic ) import qualified Optics import Polysemy import Polysemy.Reader import Polysemy.ConstraintAbsorber.MonadReader gview :: (ViewableOptic k r, Member (Reader s) effs) => Optic' k is s r -> Sem effs (ViewResult k r) gview :: Optic' k is s r -> Sem effs (ViewResult k r) gview Optic' k is s r o = (MonadReader s (Sem effs) => Sem effs (ViewResult k r)) -> Sem effs (ViewResult k r) forall i (r :: EffectRow) a. Member (Reader i) r => (MonadReader i (Sem r) => Sem r a) -> Sem r a absorbReader (Optic' k is s r -> Sem effs (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) {-# INLINE gview #-} gviews :: (ViewableOptic k r, Member (Reader s) effs) => Optic' k is s a -> (a -> r) -> Sem effs (ViewResult k r) gviews :: Optic' k is s a -> (a -> r) -> Sem effs (ViewResult k r) gviews Optic' k is s a o a -> r f = (MonadReader s (Sem effs) => Sem effs (ViewResult k r)) -> Sem effs (ViewResult k r) forall i (r :: EffectRow) a. Member (Reader i) r => (MonadReader i (Sem r) => Sem r a) -> Sem r a absorbReader (Optic' k is s a -> (a -> r) -> Sem effs (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) {-# INLINE gviews #-}