free 4.12.3 → 4.12.4
raw patch · 10 files changed
+31/−13 lines, 10 filesdep ~exceptionsPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: exceptions
API changes (from Hackage documentation)
- Control.Comonad.Cofree.Class: instance (Control.Comonad.Cofree.Class.ComonadCofree f w, Data.Semigroup.Semigroup m, GHC.Base.Monoid m) => Control.Comonad.Cofree.Class.ComonadCofree f (Control.Comonad.Trans.Traced.TracedT m w)
- Control.Comonad.Trans.Cofree: instance GHC.Base.Functor f => Control.Comonad.Trans.Class.ComonadTrans (Control.Comonad.Trans.Cofree.CofreeT f)
- Control.Monad.Free.Church: instance (Data.Foldable.Foldable f, GHC.Base.Functor f) => Data.Foldable.Foldable (Control.Monad.Free.Church.F f)
- Control.Monad.Trans.Free.Church: instance (GHC.Base.Functor f, Control.Monad.Reader.Class.MonadReader r m) => Control.Monad.Reader.Class.MonadReader r (Control.Monad.Trans.Free.Church.FT f m)
- Control.Monad.Trans.Free.Church: instance (GHC.Base.Functor f, Control.Monad.State.Class.MonadState s m) => Control.Monad.State.Class.MonadState s (Control.Monad.Trans.Free.Church.FT f m)
+ Control.Comonad.Cofree.Class: instance (Control.Comonad.Cofree.Class.ComonadCofree f w, GHC.Base.Monoid m) => Control.Comonad.Cofree.Class.ComonadCofree f (Control.Comonad.Trans.Traced.TracedT m w)
+ Control.Comonad.Trans.Cofree: instance Control.Comonad.Trans.Class.ComonadTrans (Control.Comonad.Trans.Cofree.CofreeT f)
+ Control.Monad.Free.Church: instance Data.Foldable.Foldable f => Data.Foldable.Foldable (Control.Monad.Free.Church.F f)
+ Control.Monad.Trans.Free.Church: instance Control.Monad.Reader.Class.MonadReader r m => Control.Monad.Reader.Class.MonadReader r (Control.Monad.Trans.Free.Church.FT f m)
+ Control.Monad.Trans.Free.Church: instance Control.Monad.State.Class.MonadState s m => Control.Monad.State.Class.MonadState s (Control.Monad.Trans.Free.Church.FT f m)
- Control.Monad.Free: foldFree :: (Functor m, Monad m) => (forall x. f x -> m x) -> Free f a -> m a
+ Control.Monad.Free: foldFree :: Monad m => (forall x. f x -> m x) -> Free f a -> m a
- Control.Monad.Free.Church: iter :: Functor f => (f a -> a) -> F f a -> a
+ Control.Monad.Free.Church: iter :: (f a -> a) -> F f a -> a
- Control.Monad.Free.Church: iterM :: (Monad m, Functor f) => (f (m a) -> m a) -> F f a -> m a
+ Control.Monad.Free.Church: iterM :: Monad m => (f (m a) -> m a) -> F f a -> m a
- Control.Monad.Trans.Free: intercalateT :: (Monad m, MonadTrans t, Monad (t m), Functor (t m)) => t m a -> FreeT (t m) m b -> t m b
+ Control.Monad.Trans.Free: intercalateT :: (Monad m, MonadTrans t, Monad (t m)) => t m a -> FreeT (t m) m b -> t m b
- Control.Monad.Trans.Free.Church: retract :: (Functor f, Monad f) => F f a -> f a
+ Control.Monad.Trans.Free.Church: retract :: Monad f => F f a -> f a
- Control.Monad.Trans.Free.Church: transFT :: Monad m => (forall a. f a -> g a) -> FT f m b -> FT g m b
+ Control.Monad.Trans.Free.Church: transFT :: (forall a. f a -> g a) -> FT f m b -> FT g m b
Files
- CHANGELOG.markdown +5/−0
- free.cabal +1/−1
- src/Control/Alternative/Free.hs +1/−1
- src/Control/Comonad/Cofree/Class.hs +5/−2
- src/Control/Comonad/Trans/Cofree.hs +1/−1
- src/Control/Monad/Free.hs +1/−1
- src/Control/Monad/Free/Church.hs +3/−3
- src/Control/Monad/Free/TH.hs +2/−0
- src/Control/Monad/Trans/Free.hs +4/−0
- src/Control/Monad/Trans/Free/Church.hs +8/−4
CHANGELOG.markdown view
@@ -1,3 +1,8 @@+4.12.4+------+* Removed a number of spurious class constraints.+* Support GHC 8+ 4.12.3 ------ * Support `comonad` 5
free.cabal view
@@ -1,6 +1,6 @@ name: free category: Control, Monads-version: 4.12.3+version: 4.12.4 license: BSD3 cabal-version: >= 1.10 license-file: LICENSE
src/Control/Alternative/Free.hs view
@@ -69,7 +69,7 @@ (Alt xs) <*> ys = Alt (xs >>= alternatives . (`ap'` ys)) where- ap' :: (Functor f) => AltF f (a -> b) -> Alt f a -> Alt f b+ ap' :: AltF f (a -> b) -> Alt f a -> Alt f b Pure f `ap'` u = fmap f u (u `Ap` f) `ap'` v = Alt [u `Ap` (flip <$> f) <*> v]
src/Control/Comonad/Cofree/Class.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE FlexibleInstances #-}@@ -24,7 +25,9 @@ import Control.Comonad.Trans.Identity import Data.List.NonEmpty import Data.Tree-import Data.Semigroup+#if __GLASGOW_HASKELL__ < 710+import Data.Monoid+#endif -- | Allows you to peel a layer off a cofree comonad. class (Functor f, Comonad w) => ComonadCofree f w | w -> f where@@ -50,5 +53,5 @@ instance ComonadCofree f w => ComonadCofree f (StoreT s w) where unwrap (StoreT wsa s) = flip StoreT s <$> unwrap wsa -instance (ComonadCofree f w, Semigroup m, Monoid m) => ComonadCofree f (TracedT m w) where+instance (ComonadCofree f w, Monoid m) => ComonadCofree f (TracedT m w) where unwrap (TracedT wma) = TracedT <$> unwrap wma
src/Control/Comonad/Trans/Cofree.hs view
@@ -140,7 +140,7 @@ instance (Traversable f, Traversable w) => Traversable (CofreeT f w) where traverse f = fmap CofreeT . traverse (bitraverse f (traverse f)) . runCofreeT -instance Functor f => ComonadTrans (CofreeT f) where+instance ComonadTrans (CofreeT f) where lower = fmap headF . runCofreeT instance (Functor f, Comonad w) => ComonadCofree f (CofreeT f w) where
src/Control/Monad/Free.hs view
@@ -320,7 +320,7 @@ hoistFree f (Free as) = Free (hoistFree f <$> f as) -- | The very definition of a free monad is that given a natural transformation you get a monad homomorphism.-foldFree :: (Functor m, Monad m) => (forall x . f x -> m x) -> Free f a -> m a+foldFree :: Monad m => (forall x . f x -> m x) -> Free f a -> m a foldFree _ (Pure a) = return a foldFree f (Free as) = f as >>= foldFree f
src/Control/Monad/Free/Church.hs view
@@ -89,11 +89,11 @@ newtype F f a = F { runF :: forall r. (a -> r) -> (f r -> r) -> r } -- | Tear down a 'Free' 'Monad' using iteration.-iter :: Functor f => (f a -> a) -> F f a -> a+iter :: (f a -> a) -> F f a -> a iter phi xs = runF xs id phi -- | Like iter for monadic values.-iterM :: (Monad m, Functor f) => (f (m a) -> m a) -> F f a -> m a+iterM :: Monad m => (f (m a) -> m a) -> F f a -> m a iterM phi xs = runF xs return phi instance Functor (F f) where@@ -123,7 +123,7 @@ a = f (impure a) impure (F x) = x id (error "MonadFix (F f): wrap") -instance (Foldable f, Functor f) => Foldable (F f) where+instance Foldable f => Foldable (F f) where foldr f r xs = runF xs f (foldr (.) id) r {-# INLINE foldr #-}
src/Control/Monad/Free/TH.hs view
@@ -189,6 +189,7 @@ RecC cName fields -> liftCon' typeSig ts cx f n ns cName $ map (\(_, _, ty) -> ty) fields InfixC (_,t1) cName (_,t2) -> liftCon' typeSig ts cx f n ns cName [t1, t2] ForallC ts' cx' con' -> liftCon typeSig (ts ++ ts') (cx ++ cx') f n ns con'+ _ -> fail "Unsupported constructor type" -- | Provide free monadic actions for a type declaration. liftDec :: Bool -- ^ Include type signature?@@ -217,6 +218,7 @@ constructorName (RecC name _) = name constructorName (InfixC _ name _) = name constructorName (ForallC _ _ c) = constructorName c+constructorName _ = error "Unsupported constructor type" -- | Generate monadic actions for a data type. genFree :: Bool -- ^ Include type signature?
src/Control/Monad/Trans/Free.hs view
@@ -431,7 +431,11 @@ -- @ -- 'intercalateT' f ≡ 'retractT' . 'intersperseT' f -- @+#if __GLASGOW_HASKELL__ < 710 intercalateT :: (Monad m, MonadTrans t, Monad (t m), Functor (t m)) => t m a -> FreeT (t m) m b -> t m b+#else+intercalateT :: (Monad m, MonadTrans t, Monad (t m)) => t m a -> FreeT (t m) m b -> t m b+#endif intercalateT f (FreeT m) = do val <- lift m case val of
src/Control/Monad/Trans/Free/Church.hs view
@@ -146,10 +146,10 @@ {-# INLINE throwError #-} m `catchError` f = toFT $ fromFT m `catchError` (fromFT . f) -instance (MonadCont m) => MonadCont (FT f m) where+instance MonadCont m => MonadCont (FT f m) where callCC f = join . lift $ callCC (\k -> return $ f (lift . k . return)) -instance (Functor f, MonadReader r m) => MonadReader r (FT f m) where+instance MonadReader r m => MonadReader r (FT f m) where ask = lift ask {-# INLINE ask #-} local f = hoistFT (local f)@@ -165,7 +165,7 @@ {-# INLINE writer #-} #endif -instance (Functor f, MonadState s m) => MonadState s (FT f m) where+instance MonadState s m => MonadState s (FT f m) where get = lift get {-# INLINE get #-} put = lift . put@@ -223,7 +223,7 @@ hoistFT phi (FT m) = FT (\kp kf -> join . phi $ m (return . kp) (\xg -> return . kf (join . phi . xg))) -- | Lift a natural transformation from @f@ to @g@ into a monad homomorphism from @'FT' f m@ to @'FT' g n@-transFT :: Monad m => (forall a. f a -> g a) -> FT f m b -> FT g m b+transFT :: (forall a. f a -> g a) -> FT f m b -> FT g m b transFT phi (FT m) = FT (\kp kf -> m kp (\xg -> kf xg . phi)) -- | Pull out and join @m@ layers of @'FreeT' f m a@.@@ -252,7 +252,11 @@ -- @ -- 'retract' . 'liftF' = 'id' -- @+#if __GLASGOW_HASKELL__ < 710 retract :: (Functor f, Monad f) => F f a -> f a+#else+retract :: Monad f => F f a -> f a+#endif retract m = runF m return join {-# INLINE retract #-}