pipes 4.3.4 → 4.3.5
raw patch · 4 files changed
+27/−15 lines, 4 filesdep +semigroupsdep ~basePVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: semigroups
Dependency ranges changed: base
API changes (from Hackage documentation)
- Pipes.Internal: instance (GHC.Base.Monad m, GHC.Base.Monoid r) => GHC.Base.Monoid (Pipes.Internal.Proxy a' a b' b m r)
+ Pipes: instance GHC.Base.Monad m => Data.Semigroup.Semigroup (Pipes.ListT m a)
+ Pipes.Internal: instance (GHC.Base.Monad m, Data.Semigroup.Semigroup r) => Data.Semigroup.Semigroup (Pipes.Internal.Proxy a' a b' b m r)
+ Pipes.Internal: instance (GHC.Base.Monad m, GHC.Base.Monoid r, Data.Semigroup.Semigroup r) => GHC.Base.Monoid (Pipes.Internal.Proxy a' a b' b m r)
Files
- CHANGELOG.md +4/−0
- pipes.cabal +3/−2
- src/Pipes.hs +9/−6
- src/Pipes/Internal.hs +11/−7
CHANGELOG.md view
@@ -1,3 +1,7 @@+4.3.5++* Support `Semigroup` being a super-class of `Monoid`+ 4.3.4 * Increase upper bound on `mmorph`
pipes.cabal view
@@ -1,5 +1,5 @@ Name: pipes-Version: 4.3.4+Version: 4.3.5 Cabal-Version: >= 1.10 Build-Type: Simple Tested-With: GHC == 7.4.2, GHC == 7.6.3, GHC == 7.8.4, GHC == 7.10.2, GHC == 8.0.1@@ -51,7 +51,8 @@ exceptions >= 0.4 && < 0.9, mmorph >= 1.0.0 && < 1.2, mtl >= 2.2.1 && < 2.3,- void >= 0.4 && < 0.8+ void >= 0.4 && < 0.8,+ semigroups >= 0.17 && < 0.19 Exposed-Modules: Pipes,
src/Pipes.hs view
@@ -63,11 +63,10 @@ , Foldable ) where -import Control.Monad (void)-import Control.Monad.Catch (MonadThrow(..), MonadCatch(..), MonadMask(..))+import Control.Monad (void, MonadPlus(mzero, mplus))+import Control.Monad.Catch (MonadThrow(..), MonadCatch(..)) import Control.Monad.Except (MonadError(..)) import Control.Monad.IO.Class (MonadIO(liftIO))-import Control.Monad (MonadPlus(mzero, mplus)) import Control.Monad.Reader (MonadReader(..)) import Control.Monad.State (MonadState(..)) import Control.Monad.Trans.Class (MonadTrans(lift))@@ -86,10 +85,8 @@ import Control.Applicative import Data.Foldable (Foldable) import Data.Traversable (Traversable(..))-import Data.Monoid #endif--import qualified Control.Monad.Catch+import Data.Semigroup -- Re-exports import Control.Monad.Morph (MFunctor(hoist), MMonad(embed))@@ -484,11 +481,17 @@ loop (Pure r ) = Pure r {-# INLINE embed #-} +instance (Monad m) => Semigroup (ListT m a) where+ (<>) = (<|>)+ {-# INLINE (<>) #-}+ instance (Monad m) => Monoid (ListT m a) where mempty = empty {-# INLINE mempty #-}+#if !(MIN_VERSION_base(4,11,0)) mappend = (<|>) {-# INLINE mappend #-}+#endif instance (MonadState s m) => MonadState s (ListT m) where get = lift get
src/Pipes/Internal.hs view
@@ -38,7 +38,7 @@ import Control.Monad.Trans.Class (MonadTrans(lift)) import Control.Monad.Morph (MFunctor(hoist), MMonad(embed)) import Control.Monad.Except (MonadError(..))-import Control.Monad.Catch (MonadThrow(..), MonadCatch(..), MonadMask(..))+import Control.Monad.Catch (MonadThrow(..), MonadCatch(..)) import Control.Monad.Reader (MonadReader(..)) import Control.Monad.State (MonadState(..)) import Control.Monad.Writer (MonadWriter(..))@@ -48,10 +48,9 @@ import Control.Applicative (Alternative(..)) #else import Control.Applicative-import Data.Monoid #endif+import Data.Semigroup -import qualified Control.Monad.Catch import qualified Data.Void {-| A 'Proxy' is a monad transformer that receives and sends information on both@@ -121,14 +120,19 @@ _bind (Pure r ) f = f r; #-} -instance (Monad m, Monoid r) => Monoid (Proxy a' a b' b m r) where- mempty = Pure mempty- mappend p1 p2 = go p1 where+instance (Monad m, Semigroup r) => Semigroup (Proxy a' a b' b m r) where+ p1 <> p2 = go p1 where go p = case p of Request a' fa -> Request a' (\a -> go (fa a )) Respond b fb' -> Respond b (\b' -> go (fb' b')) M m -> M (m >>= \p' -> return (go p'))- Pure r1 -> fmap (mappend r1) p2+ Pure r1 -> fmap (r1 <>) p2++instance (Monad m, Monoid r, Semigroup r) => Monoid (Proxy a' a b' b m r) where+ mempty = Pure mempty+#if !(MIN_VERSION_base(4,11,0))+ mappend = (<>)+#endif instance MonadTrans (Proxy a' a b' b) where lift m = M (m >>= \r -> return (Pure r))