extensible-effects 1.5.0 → 1.6.0
raw patch · 4 files changed
+14/−7 lines, 4 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Control.Eff.Lift: instance (MonadBase b m, Typeable1 m, Member (* -> *) * (Lift m) r) => MonadBase b (Eff r)
- Control.Eff.Lift: instance (Typeable1 m, MonadIO m, Member (* -> *) * (Lift m) r) => MonadIO (Eff r)
- Control.Eff.Lift: instance Functor (Lift m)
- Control.Eff.Lift: instance Member (* -> *) * (Lift m) r => SetMember ((* -> *) -> * -> *) * Lift (Lift m) r
- Control.Eff.Lift: instance Typeable1 m => Typeable1 (Lift m)
+ Control.Eff.Lift: instance [incoherent] (MonadBase b m, Typeable1 m, Member (* -> *) * (Lift m) r) => MonadBase b (Eff r)
+ Control.Eff.Lift: instance [incoherent] (Typeable1 m, MonadIO m, Member (* -> *) * (Lift m) r) => MonadIO (Eff r)
+ Control.Eff.Lift: instance [incoherent] Functor (Lift m)
+ Control.Eff.Lift: instance [incoherent] Member (* -> *) * (Lift m) r => SetMember ((* -> *) -> * -> *) * Lift (Lift m) r
+ Control.Eff.Lift: instance [incoherent] SetMember ((* -> *) -> * -> *) * Lift (Lift m) ((:>) * (Lift m) ())
+ Control.Eff.Lift: instance [incoherent] Typeable1 m => Typeable1 (Lift m)
- Control.Eff: class SetMember set (t :: * -> *) r | r set -> t
+ Control.Eff: class Member t r => SetMember set (t :: * -> *) r | r set -> t
- Control.Eff.Lift: lift :: (Typeable1 m, Member (Lift m) r) => m a -> Eff r a
+ Control.Eff.Lift: lift :: (Typeable1 m, SetMember Lift (Lift m) r) => m a -> Eff r a
Files
- extensible-effects.cabal +1/−1
- src/Control/Eff/Lift.hs +7/−5
- src/Data/OpenUnion1.hs +2/−1
- test/Test.hs +4/−0
extensible-effects.cabal view
@@ -1,5 +1,5 @@ Name: extensible-effects-Version: 1.5.0+Version: 1.6.0 Synopsis: An Alternative to Monad Transformers Description: This package introduces datatypes for typeclass-constrained effects, as an alternative to monad-transformer based (datatype-constrained)
src/Control/Eff/Lift.hs view
@@ -5,8 +5,9 @@ {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE ExistentialQuantification #-}-{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE IncoherentInstances #-}+{-# LANGUAGE CPP #-} {-# OPTIONS -fno-warn-orphans #-} -- | Lifting primitive Monad types to effectful computations. -- We only allow a single Lifted Monad because Monads aren't commutative@@ -36,6 +37,7 @@ [typeOf1 (undefined :: m ())] #endif +instance SetMember Lift (Lift m) (Lift m :> ()) instance Member (Lift m) r => SetMember Lift (Lift m) r instance Functor (Lift m) where@@ -50,12 +52,12 @@ liftBase = (lift :: m a -> Eff r a) . liftBase {-# INLINE liftBase #-} --- | Lift a Monad to an Effect.-lift :: (Typeable1 m, Member (Lift m) r) => m a -> Eff r a+-- | Lift a Monad to an Effect. We only allow a single lifted Monad.+lift :: (Typeable1 m, SetMember Lift (Lift m) r) => m a -> Eff r a lift m = send (inj . Lift m) --- | The handler of Lift requests. It is meant to be terminal:--- we only allow a single Lifted Monad.+-- | The handler of Lift requests. It is a terminal handler:+-- use `runLift` in place of `run`. runLift :: (Monad m, Typeable1 m) => Eff (Lift m :> ()) w -> m w runLift m = loop (admin m) where loop (Val x) = return x
src/Data/OpenUnion1.hs view
@@ -8,6 +8,7 @@ {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE OverlappingInstances #-} {-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE IncoherentInstances #-} {-# LANGUAGE CPP #-} #if MIN_VERSION_base(4,7,0)@@ -75,7 +76,7 @@ -- > -- > -- Only allow a single unique Lift effect, by making a "Lift" set. -- > instance Member (Lift m) r => SetMember Lift (Lift m) r-class SetMember set (t :: * -> *) r | r set -> t+class Member t r => SetMember set (t :: * -> *) r | r set -> t instance SetMember set t r => SetMember set t (t' :> r) {-# INLINE inj #-}
test/Test.hs view
@@ -147,6 +147,10 @@ return 5 in assertEqual "Fail should stop writing" 6 ret +-- | Ensure that https://github.com/RobotGymnast/extensible-effects/issues/11 stays resolved.+testLift :: Assertion+testLift = runLift (lift $ return () :: Eff (Lift IO :> ()) ())+ tests = [ testProperty "Documentation example." testDocs , testCase "Test runReader laziness." testReaderLaziness