polysemy 1.2.0.0 → 1.2.1.0
raw patch · 4 files changed
+27/−7 lines, 4 filesdep ~first-class-familiesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: first-class-families
API changes (from Hackage documentation)
+ Polysemy: type InterpreterFor e r = forall a. Sem (e : r) a -> Sem r a
+ Polysemy.Internal: type InterpreterFor e r = forall a. Sem (e : r) a -> Sem r a
- Polysemy.Async: async :: forall r_atpS a_Xtdq. MemberWithError Async r_atpS => Sem r_atpS a_Xtdq -> Sem r_atpS (Async (Maybe a_Xtdq))
+ Polysemy.Async: async :: forall r_atr3 a_XteB. MemberWithError Async r_atr3 => Sem r_atr3 a_XteB -> Sem r_atr3 (Async (Maybe a_XteB))
- Polysemy.Async: await :: forall r_atpU a_atdq. MemberWithError Async r_atpU => Async a_atdq -> Sem r_atpU a_atdq
+ Polysemy.Async: await :: forall r_atr5 a_ateB. MemberWithError Async r_atr5 => Async a_ateB -> Sem r_atr5 a_ateB
- Polysemy.Error: catch :: forall e_aukD r_aumy a_aukF. MemberWithError (Error e_aukD) r_aumy => Sem r_aumy a_aukF -> (e_aukD -> Sem r_aumy a_aukF) -> Sem r_aumy a_aukF
+ Polysemy.Error: catch :: forall e_aulO r_aunJ a_aulQ. MemberWithError (Error e_aulO) r_aunJ => Sem r_aunJ a_aulQ -> (e_aulO -> Sem r_aunJ a_aulQ) -> Sem r_aunJ a_aulQ
- Polysemy.Error: throw :: forall e_aukA r_aumw a_aukC. MemberWithError (Error e_aukA) r_aumw => e_aukA -> Sem r_aumw a_aukC
+ Polysemy.Error: throw :: forall e_aulL r_aunH a_aulN. MemberWithError (Error e_aulL) r_aunH => e_aulL -> Sem r_aunH a_aulN
- Polysemy.Input: input :: forall i_aEt6 r_aEtZ. MemberWithError (Input i_aEt6) r_aEtZ => Sem r_aEtZ i_aEt6
+ Polysemy.Input: input :: forall i_aEuh r_aEva. MemberWithError (Input i_aEuh) r_aEva => Sem r_aEva i_aEuh
- Polysemy.Internal.Writer: listen :: forall o_awlQ r_awoe a_XwlT. MemberWithError (Writer o_awlQ) r_awoe => Sem r_awoe a_XwlT -> Sem r_awoe (o_awlQ, a_XwlT)
+ Polysemy.Internal.Writer: listen :: forall o_awn1 r_awpp a_Xwn4. MemberWithError (Writer o_awn1) r_awpp => Sem r_awpp a_Xwn4 -> Sem r_awpp (o_awn1, a_Xwn4)
- Polysemy.Internal.Writer: pass :: forall o_awlU r_awog a_awlV. MemberWithError (Writer o_awlU) r_awog => Sem r_awog (o_awlU -> o_awlU, a_awlV) -> Sem r_awog a_awlV
+ Polysemy.Internal.Writer: pass :: forall o_awn5 r_awpr a_awn6. MemberWithError (Writer o_awn5) r_awpr => Sem r_awpr (o_awn5 -> o_awn5, a_awn6) -> Sem r_awpr a_awn6
- Polysemy.Internal.Writer: tell :: forall o_awlO r_awoc. MemberWithError (Writer o_awlO) r_awoc => o_awlO -> Sem r_awoc ()
+ Polysemy.Internal.Writer: tell :: forall o_awmZ r_awpn. MemberWithError (Writer o_awmZ) r_awpn => o_awmZ -> Sem r_awpn ()
- Polysemy.Output: output :: forall o_aCXr r_aCYh. MemberWithError (Output o_aCXr) r_aCYh => o_aCXr -> Sem r_aCYh ()
+ Polysemy.Output: output :: forall o_aCYC r_aCZs. MemberWithError (Output o_aCYC) r_aCZs => o_aCYC -> Sem r_aCZs ()
- Polysemy.Reader: ask :: forall i_aEPQ r_aERn. MemberWithError (Reader i_aEPQ) r_aERn => Sem r_aERn i_aEPQ
+ Polysemy.Reader: ask :: forall i_aER1 r_aESy. MemberWithError (Reader i_aER1) r_aESy => Sem r_aESy i_aER1
- Polysemy.Reader: local :: forall i_aEPS r_aERo a_aEPU. MemberWithError (Reader i_aEPS) r_aERo => (i_aEPS -> i_aEPS) -> Sem r_aERo a_aEPU -> Sem r_aERo a_aEPU
+ Polysemy.Reader: local :: forall i_aER3 r_aESz a_aER5. MemberWithError (Reader i_aER3) r_aESz => (i_aER3 -> i_aER3) -> Sem r_aESz a_aER5 -> Sem r_aESz a_aER5
- Polysemy.Resource: bracket :: forall r_azQ0 a_XzNN c_XzNP b_azNO. MemberWithError Resource r_azQ0 => Sem r_azQ0 a_XzNN -> (a_XzNN -> Sem r_azQ0 c_XzNP) -> (a_XzNN -> Sem r_azQ0 b_azNO) -> Sem r_azQ0 b_azNO
+ Polysemy.Resource: bracket :: forall r_azRb a_XzOY c_XzP0 b_azOZ. MemberWithError Resource r_azRb => Sem r_azRb a_XzOY -> (a_XzOY -> Sem r_azRb c_XzP0) -> (a_XzOY -> Sem r_azRb b_azOZ) -> Sem r_azRb b_azOZ
- Polysemy.Resource: bracketOnError :: forall r_azQ4 a_XzNR c_XzNT b_azNS. MemberWithError Resource r_azQ4 => Sem r_azQ4 a_XzNR -> (a_XzNR -> Sem r_azQ4 c_XzNT) -> (a_XzNR -> Sem r_azQ4 b_azNS) -> Sem r_azQ4 b_azNS
+ Polysemy.Resource: bracketOnError :: forall r_azRf a_XzP2 c_XzP4 b_azP3. MemberWithError Resource r_azRf => Sem r_azRf a_XzP2 -> (a_XzP2 -> Sem r_azRf c_XzP4) -> (a_XzP2 -> Sem r_azRf b_azP3) -> Sem r_azRf b_azP3
- Polysemy.State: get :: forall s_aBu2 r_aBvv. MemberWithError (State s_aBu2) r_aBvv => Sem r_aBvv s_aBu2
+ Polysemy.State: get :: forall s_aBvd r_aBwG. MemberWithError (State s_aBvd) r_aBwG => Sem r_aBwG s_aBvd
- Polysemy.State: put :: forall s_aBu4 r_aBvw. MemberWithError (State s_aBu4) r_aBvw => s_aBu4 -> Sem r_aBvw ()
+ Polysemy.State: put :: forall s_aBvf r_aBwH. MemberWithError (State s_aBvf) r_aBwH => s_aBvf -> Sem r_aBwH ()
- Polysemy.Trace: trace :: forall r_aGkx. MemberWithError Trace r_aGkx => String -> Sem r_aGkx ()
+ Polysemy.Trace: trace :: forall r_aGlI. MemberWithError Trace r_aGlI => String -> Sem r_aGlI ()
- Polysemy.Writer: listen :: forall o_awlQ r_awoe a_XwlT. MemberWithError (Writer o_awlQ) r_awoe => Sem r_awoe a_XwlT -> Sem r_awoe (o_awlQ, a_XwlT)
+ Polysemy.Writer: listen :: forall o_awn1 r_awpp a_Xwn4. MemberWithError (Writer o_awn1) r_awpp => Sem r_awpp a_Xwn4 -> Sem r_awpp (o_awn1, a_Xwn4)
- Polysemy.Writer: pass :: forall o_awlU r_awog a_awlV. MemberWithError (Writer o_awlU) r_awog => Sem r_awog (o_awlU -> o_awlU, a_awlV) -> Sem r_awog a_awlV
+ Polysemy.Writer: pass :: forall o_awn5 r_awpr a_awn6. MemberWithError (Writer o_awn5) r_awpr => Sem r_awpr (o_awn5 -> o_awn5, a_awn6) -> Sem r_awpr a_awn6
- Polysemy.Writer: tell :: forall o_awlO r_awoc. MemberWithError (Writer o_awlO) r_awoc => o_awlO -> Sem r_awoc ()
+ Polysemy.Writer: tell :: forall o_awmZ r_awpn. MemberWithError (Writer o_awmZ) r_awpn => o_awmZ -> Sem r_awpn ()
Files
- ChangeLog.md +4/−0
- polysemy.cabal +5/−5
- src/Polysemy.hs +6/−2
- src/Polysemy/Internal.hs +12/−0
ChangeLog.md view
@@ -1,5 +1,9 @@ # Changelog for polysemy +## 1.2.1.0 (2019-09-15)++- Added `InterpreterFor` (thanks to @bolt12)+- Bumped bounds for first-class-families ## 1.2.0.0 (2019-09-04)
polysemy.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: a8b3a81d8983405247d7e8cb0010669caf9e8f62f85762990fadbeccdafc6094+-- hash: 7ce7e4fdc1a3ebff15b38a550ed247a4ad04bb4c383ad4440212926b3eeea93c name: polysemy-version: 1.2.0.0+version: 1.2.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@@ -82,7 +82,7 @@ async >=2.2 && <3 , base >=4.9 && <5 , containers >=0.5 && <0.7- , first-class-families >=0.5.0.0 && <0.6+ , first-class-families >=0.5.0.0 && <0.7 , mtl >=2.2.2 && <3 , stm >=2 && <3 , syb >=0.7 && <0.8@@ -143,7 +143,7 @@ , base >=4.9 && <5 , containers >=0.5 && <0.7 , doctest >=0.16.0.1 && <0.17- , first-class-families >=0.5.0.0 && <0.6+ , first-class-families >=0.5.0.0 && <0.7 , hspec >=2.6.0 && <3 , inspection-testing >=0.4.2 && <0.5 , mtl >=2.2.2 && <3@@ -177,7 +177,7 @@ , base >=4.9 && <5 , containers >=0.5 && <0.7 , criterion- , first-class-families >=0.5.0.0 && <0.6+ , first-class-families >=0.5.0.0 && <0.7 , free , freer-simple , mtl
src/Polysemy.hs view
@@ -9,11 +9,15 @@ , runM , runFinal + -- * Type synonyms for user convenience+ , InterpreterFor+ -- * Interoperating With Other Monads -- ** Embed , Embed (..) , embed , embedToFinal+ -- ** Final -- | For advanced uses of 'Final', including creating your own interpreters -- that make use of it, see "Polysemy.Final"@@ -132,11 +136,11 @@ , Inspector (..) ) where +import Polysemy.Final import Polysemy.Internal import Polysemy.Internal.Combinators import Polysemy.Internal.Forklift import Polysemy.Internal.Kind-import Polysemy.Internal.TH.Effect import Polysemy.Internal.Tactics-import Polysemy.Final+import Polysemy.Internal.TH.Effect
src/Polysemy/Internal.hs view
@@ -23,6 +23,7 @@ , usingSem , liftSem , hoistSem+ , InterpreterFor , (.@) , (.@@) ) where@@ -434,6 +435,17 @@ pure $ f $ a <$ s {-# INLINE runM #-} +------------------------------------------------------------------------------+-- | Type synonym for interpreters that consume an effect without changing the +-- return value. Offered for user convenience. +--+-- @r@ Is kept polymorphic so it's possible to place constraints upon it:+--+-- @+-- teletypeToIO :: 'Member' (Embed IO) r+-- => 'InterpreterFor' Teletype r+-- @+type InterpreterFor e r = forall a. Sem (e ': r) a -> Sem r a ------------------------------------------------------------------------------ -- | Some interpreters need to be able to lower down to the base monad (often