packages feed

polysemy 0.5.0.0 → 0.5.0.1

raw patch · 4 files changed

+43/−3 lines, 4 files

Files

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"]+