packages feed

polysemy 0.5.0.1 → 0.5.1.0

raw patch · 3 files changed

+36/−2 lines, 3 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

+ Polysemy.Error: fromEither :: Member (Error e) r => Either e a -> Sem r a
+ Polysemy.Error: fromEitherM :: (Member (Error e) r, Member (Lift m) r) => m (Either e a) -> Sem r a
- Polysemy.Async: async :: forall r_avXR a_avPL. Member Async r_avXR => Sem r_avXR a_avPL -> Sem r_avXR (Async (Maybe a_avPL))
+ Polysemy.Async: async :: forall r_aw6y a_avYs. Member Async r_aw6y => Sem r_aw6y a_avYs -> Sem r_aw6y (Async (Maybe a_avYs))
- Polysemy.Async: await :: forall r_avXT a_avOC. Member Async r_avXT => Async a_avOC -> Sem r_avXT a_avOC
+ Polysemy.Async: await :: forall r_aw6A a_avXj. Member Async r_aw6A => Async a_avXj -> Sem r_aw6A a_avXj
- Polysemy.Input: input :: forall a_aAMH r_aANB. Member (Input a_aAMH) r_aANB => Sem r_aANB a_aAMH
+ Polysemy.Input: input :: forall a_aAVo r_aAWi. Member (Input a_aAVo) r_aAWi => Sem r_aAWi a_aAVo
- Polysemy.Output: output :: forall o_aA7D r_aA8w. Member (Output o_aA7D) r_aA8w => o_aA7D -> Sem r_aA8w ()
+ Polysemy.Output: output :: forall o_aAgk r_aAhd. Member (Output o_aAgk) r_aAhd => o_aAgk -> Sem r_aAhd ()
- Polysemy.Reader: ask :: forall a_aB8P r_aBan. Member (Reader a_aB8P) r_aBan => Sem r_aBan a_aB8P
+ Polysemy.Reader: ask :: forall a_aBhw r_aBj4. Member (Reader a_aBhw) r_aBj4 => Sem r_aBj4 a_aBhw
- Polysemy.Reader: local :: forall i_aB8N r_aBao a_aB8P. Member (Reader i_aB8N) r_aBao => (i_aB8N -> i_aB8N) -> Sem r_aBao a_aB8P -> Sem r_aBao a_aB8P
+ Polysemy.Reader: local :: forall i_aBhu r_aBj5 a_aBhw. Member (Reader i_aBhu) r_aBj5 => (i_aBhu -> i_aBhu) -> Sem r_aBj5 a_aBhw -> Sem r_aBj5 a_aBhw
- Polysemy.Resource: bracket :: forall r_axuT a_axuD c_axuE a_axsD. Member Resource r_axuT => Sem r_axuT a_axuD -> (a_axuD -> Sem r_axuT c_axuE) -> (a_axuD -> Sem r_axuT a_axsD) -> Sem r_axuT a_axsD
+ Polysemy.Resource: bracket :: forall r_axDA a_axDk c_axDl a_axBk. Member Resource r_axDA => Sem r_axDA a_axDk -> (a_axDk -> Sem r_axDA c_axDl) -> (a_axDk -> Sem r_axDA a_axBk) -> Sem r_axDA a_axBk
- Polysemy.Resource: bracketOnError :: forall r_axuX a_axuL c_axuM a_axsD. Member Resource r_axuX => Sem r_axuX a_axuL -> (a_axuL -> Sem r_axuX c_axuM) -> (a_axuL -> Sem r_axuX a_axsD) -> Sem r_axuX a_axsD
+ Polysemy.Resource: bracketOnError :: forall r_axDE a_axDs c_axDt a_axBk. Member Resource r_axDE => Sem r_axDE a_axDs -> (a_axDs -> Sem r_axDE c_axDt) -> (a_axDs -> Sem r_axDE a_axBk) -> Sem r_axDE a_axBk
- Polysemy.State: get :: forall a_az0O r_az2i. Member (State a_az0O) r_az2i => Sem r_az2i a_az0O
+ Polysemy.State: get :: forall a_az9v r_azaZ. Member (State a_az9v) r_azaZ => Sem r_azaZ a_az9v
- Polysemy.State: put :: forall s_az0M r_az2j. Member (State s_az0M) r_az2j => s_az0M -> Sem r_az2j ()
+ Polysemy.State: put :: forall s_az9t r_azb0. Member (State s_az9t) r_azb0 => s_az9t -> Sem r_azb0 ()
- Polysemy.Trace: trace :: forall r_aBwg. Member Trace r_aBwg => String -> Sem r_aBwg ()
+ Polysemy.Trace: trace :: forall r_aBEX. Member Trace r_aBEX => String -> Sem r_aBEX ()
- Polysemy.Writer: censor :: forall o_aC2a r_aC4E a_aC2c. Member (Writer o_aC2a) r_aC4E => (o_aC2a -> o_aC2a) -> Sem r_aC4E a_aC2c -> Sem r_aC4E a_aC2c
+ Polysemy.Writer: censor :: forall o_aCaR r_aCdl a_aCaT. Member (Writer o_aCaR) r_aCdl => (o_aCaR -> o_aCaR) -> Sem r_aCdl a_aCaT -> Sem r_aCdl a_aCaT
- Polysemy.Writer: listen :: forall o_aC2a r_aC4C a_aC4g. Member (Writer o_aC2a) r_aC4C => Sem r_aC4C a_aC4g -> Sem r_aC4C (o_aC2a, a_aC4g)
+ Polysemy.Writer: listen :: forall o_aCaR r_aCdj a_aCcX. Member (Writer o_aCaR) r_aCdj => Sem r_aCdj a_aCcX -> Sem r_aCdj (o_aCaR, a_aCcX)
- Polysemy.Writer: tell :: forall o_aC2a r_aC4A. Member (Writer o_aC2a) r_aC4A => o_aC2a -> Sem r_aC4A ()
+ Polysemy.Writer: tell :: forall o_aCaR r_aCdh. Member (Writer o_aCaR) r_aCdh => o_aCaR -> Sem r_aCdh ()

Files

ChangeLog.md view
@@ -1,5 +1,9 @@ # Changelog for polysemy +## 0.5.1.0 (2019-06-28)++- New combinators for `Polysemy.Error`: `fromEither` and `fromEitherM`+ ## 0.5.0.1 (2019-06-27)  - Fixed a bug where `intercept` and `interceptH` wouldn't correctly handle
polysemy.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: c5b3cd4bd7beb50a960dbde4942d2d79df95157a5acf1de0d91508c7362cd0b5+-- hash: e2b39ec6e1f466a89ba47a4f54b80b55c0b68a694c2dd08f5c46e0f6ca85437a  name:           polysemy-version:        0.5.0.1+version:        0.5.1.0 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
src/Polysemy/Error.hs view
@@ -7,6 +7,8 @@     -- * Actions   , throw   , catch+  , fromEither+  , fromEitherM      -- * Interpretations   , runError@@ -15,6 +17,7 @@   ) where  import qualified Control.Exception as X+import           Control.Monad import qualified Control.Monad.Trans.Except as E import           Data.Bifunctor (first) import           Data.Typeable@@ -36,6 +39,32 @@   ------------------------------------------------------------------------------+-- | Upgrade an 'Either' into an 'Error' effect.+--+-- @since 0.5.1.0+fromEither+    :: Member (Error e) r+    => Either e a+    -> Sem r a+fromEither (Left e) = throw e+fromEither (Right a) = pure a+++------------------------------------------------------------------------------+-- | A combinator doing 'sendM' and 'fromEither' at the same time. Useful for+-- interoperating with 'IO'.+--+-- @since 0.5.1.0+fromEitherM+    :: ( Member (Error e) r+       , Member (Lift m) r+       )+    => m (Either e a)+    -> Sem r a+fromEitherM = fromEither <=< sendM+++------------------------------------------------------------------------------ -- | Run an 'Error' effect in the style of -- 'Control.Monad.Trans.Except.ExceptT'. runError@@ -126,6 +155,7 @@ {-# INLINE runErrorInIO #-}  +-- TODO(sandy): Can we use the new withLowerToIO machinery for this? runErrorAsExc     :: forall e r a. ( Typeable e        , Member (Lift IO) r