polysemy 0.5.0.0 → 0.5.0.1
raw patch · 4 files changed
+43/−3 lines, 4 files
Files
- ChangeLog.md +5/−0
- polysemy.cabal +3/−2
- src/Polysemy/Internal/Combinators.hs +10/−1
- test/InterceptSpec.hs +25/−0
ChangeLog.md view
@@ -1,5 +1,10 @@ # Changelog for polysemy +## 0.5.0.1 (2019-06-27)++- Fixed a bug where `intercept` and `interceptH` wouldn't correctly handle+ higher-order effects+ ## 0.5.0.0 (2019-06-26) ### Breaking Changes
polysemy.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 5871506acb960e1595dcd500e8680727e555c25cfbd825e98b767b01c91cffc9+-- hash: c5b3cd4bd7beb50a960dbde4942d2d79df95157a5acf1de0d91508c7362cd0b5 name: polysemy-version: 0.5.0.0+version: 0.5.0.1 synopsis: Higher-order, low-boilerplate, zero-cost free monads. description: Please see the README on GitHub at <https://github.com/isovector/polysemy#readme> category: Language@@ -107,6 +107,7 @@ FusionSpec HigherOrderSpec InspectorSpec+ InterceptSpec OutputSpec ThEffectSpec TypeErrors
src/Polysemy/Internal/Combinators.hs view
@@ -277,7 +277,7 @@ case prj u of Just (Yo e s d y v) -> usingSem k $ fmap y $ runTactics s (raise . d) v $ f e- Nothing -> k u+ Nothing -> k $ hoist (interceptH_b f) u {-# INLINE interceptH #-} @@ -289,6 +289,15 @@ -> Sem r a interpretH_b = interpretH {-# NOINLINE interpretH_b #-}+++interceptH_b+ :: Member e r+ => (∀ x m. e m x -> Tactical e m r x)+ -> Sem r a+ -> Sem r a+interceptH_b = interceptH+{-# NOINLINE interceptH_b #-} interpretInStateT_b
+ test/InterceptSpec.hs view
@@ -0,0 +1,25 @@+module InterceptSpec where++import Polysemy+import Polysemy.Resource+import Polysemy.Trace+import Test.Hspec+++withTraceLogging :: Members '[Trace] r => Sem r a -> Sem r a+withTraceLogging = intercept $ \case+ Trace msg -> do+ trace $ "logged " <> msg+ trace msg++spec :: Spec+spec = describe "intercept" $ do+ it "should weave through embedded computations" $ do+ let (msgs, ()) = run+ . runTraceAsList+ . runResource+ . withTraceLogging $ do+ trace "outside"+ bracket (pure ()) pure (const $ trace "inside")+ msgs `shouldBe` ["logged outside", "outside", "logged inside", "inside"]+