packages feed

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 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