di-polysemy 0.1.2.0 → 0.1.3.0
raw patch · 3 files changed
+26/−9 lines, 3 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
+ DiPolysemy: [Reset] :: m a -> Di level path msg m a
+ DiPolysemy: reset :: forall level_aaNC path_aaND msg_aaNE r_abrn a_aaNB. MemberWithError (Di level_aaNC path_aaND msg_aaNE) r_abrn => Sem r_abrn a_aaNB -> Sem r_abrn a_aaNB
- DiPolysemy: flush :: forall level_aaNq path_aaNr msg_aaNs r_abpV. MemberWithError (Di level_aaNq path_aaNr msg_aaNs) r_abpV => Sem r_abpV ()
+ DiPolysemy: flush :: forall level_aaNr path_aaNs msg_aaNt r_abrj. MemberWithError (Di level_aaNr path_aaNs msg_aaNt) r_abrj => Sem r_abrj ()
- DiPolysemy: local :: forall level_aaNu path_aaNv msg_aaNw r_abpW a_aaNy. MemberWithError (Di level_aaNu path_aaNv msg_aaNw) r_abpW => (Di level_aaNu path_aaNv msg_aaNw -> Di level_aaNu path_aaNv msg_aaNw) -> Sem r_abpW a_aaNy -> Sem r_abpW a_aaNy
+ DiPolysemy: local :: forall level_aaNv path_aaNw msg_aaNx r_abrk a_aaNz. MemberWithError (Di level_aaNv path_aaNw msg_aaNx) r_abrk => (Di level_aaNv path_aaNw msg_aaNx -> Di level_aaNv path_aaNw msg_aaNx) -> Sem r_abrk a_aaNz -> Sem r_abrk a_aaNz
- DiPolysemy: log :: forall level_aaNm path_aaNo msg_aaNn r_abpS. MemberWithError (Di level_aaNm path_aaNo msg_aaNn) r_abpS => level_aaNm -> msg_aaNn -> Sem r_abpS ()
+ DiPolysemy: log :: forall level_aaNn path_aaNp msg_aaNo r_abrg. MemberWithError (Di level_aaNn path_aaNp msg_aaNo) r_abrg => level_aaNn -> msg_aaNo -> Sem r_abrg ()
Files
- CHANGELOG.md +4/−0
- di-polysemy.cabal +2/−2
- src/DiPolysemy.hs +20/−7
CHANGELOG.md view
@@ -3,6 +3,10 @@ `di-polysemy` uses [PVP Versioning][1]. The changelog is available [on GitHub][2]. +## 0.1.3.0++* The 'Reset' action has been added+ ## 0.1.2.0 * 'runDiToIO' now reinterprets in terms of reader
di-polysemy.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: ae3ff1a37592db18d658e1f2b0ecdf715409297f5e16c9acdf72d1228908a854+-- hash: 9872d2e47445088ad716a3b4ccfa4fff4cc574e48bf92fbf7859504ee771d57b name: di-polysemy-version: 0.1.2.0+version: 0.1.3.0 synopsis: DI logger wrapped for Polysemy description: Please see the README on GitHub at <https://github.com/nitros12/di-polysemy> category: Logging
src/DiPolysemy.hs view
@@ -5,6 +5,7 @@ , log , flush , local+ , reset , push , attr_ , attr@@ -42,6 +43,7 @@ Log :: level -> msg -> Di level path msg m () Flush :: Di level path msg m () Local :: (DC.Di level path msg -> DC.Di level path msg) -> m a -> Di level path msg m a+ Reset :: m a -> Di level path msg m a makeSem ''Di @@ -65,24 +67,35 @@ finish pure res)) +type DiR level msg = (DC.Di level Df1.Path msg, DC.Di level Df1.Path msg)++dup :: a -> (a, a)+dup a = (a, a)+ runDiToIO :: forall r level msg a. Member (Embed IO) r => (DC.Log level Df1.Path msg -> IO ()) -> Sem (Di level Df1.Path msg ': r) a -> Sem r a-runDiToIO commit m = diToIO $ runDiIOInner commit (flip P.runReader $ go (raiseUnder m))+runDiToIO commit m = diToIO $ runDiIOInner commit (flip (P.runReader . dup) $ go (raiseUnder m)) where- go :: Member (Embed IO) r0 => Sem (Di level Df1.Path msg ': r0) a0 -> Sem (P.Reader (DC.Di level Df1.Path msg) ': r0) a0+ go :: Member (Embed IO) r0+ => Sem (Di level Df1.Path msg ': r0) a0+ -> Sem (P.Reader (DiR level msg) ': r0) a0 go = reinterpretH $ \case Log level msg -> do- di <- P.ask @(DC.Di level Df1.Path msg)- r <- embed @IO $ DC.log di level msg- pureT r- Flush -> P.ask @(DC.Di level Df1.Path msg) >>= embed @IO . DC.flush >>= pureT+ (_, di) <- P.ask @(DiR level msg)+ (embed @IO $ DC.log di level msg) >>= pureT+ Flush -> do+ (_, di) <- P.ask @(DiR level msg)+ (embed @IO $ DC.flush di) >>= pureT Local f m -> do m' <- go <$> runT m- raise $ subsume $ P.local @(DC.Di level Df1.Path msg) f m'+ raise $ subsume $ P.local @(DiR level msg) (fmap f) m'+ Reset m -> do+ m' <- go <$> runT m+ raise $ subsume $ P.local @(DiR level msg) (\(odi, _) -> (odi, odi)) m' runDiToStderrIO :: Member (Embed IO) r => Sem (Di Df1.Level Df1.Path Df1.Message ': r) a -> Sem r a runDiToStderrIO m = do