packages feed

free 5.1.7 → 5.1.8

raw patch · 10 files changed

+63/−43 lines, 10 filesdep ~mtldep ~transformersPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: mtl, transformers

API changes (from Hackage documentation)

- Control.Monad.Trans.Free: instance (GHC.Base.Functor f, Control.Monad.Reader.Class.MonadReader r m) => Control.Monad.Reader.Class.MonadReader r (Control.Monad.Trans.Free.FreeT f m)
- Control.Monad.Trans.Free: instance (GHC.Base.Functor f, Control.Monad.Writer.Class.MonadWriter w m) => Control.Monad.Writer.Class.MonadWriter w (Control.Monad.Trans.Free.FreeT f m)
- Control.Monad.Trans.Free: instance Control.Monad.Trans.Class.MonadTrans (Control.Monad.Trans.Free.FreeT f)
- Control.Monad.Trans.Free.Ap: instance Control.Monad.Trans.Class.MonadTrans (Control.Monad.Trans.Free.Ap.FreeT f)
- Control.Monad.Trans.Free.Church: instance (GHC.Base.Functor f, Control.Monad.Writer.Class.MonadWriter w m) => Control.Monad.Writer.Class.MonadWriter w (Control.Monad.Trans.Free.Church.FT f m)
+ Control.Monad.Trans.Free: instance (GHC.Base.Functor f, GHC.Base.Functor m, Control.Monad.Reader.Class.MonadReader r m) => Control.Monad.Reader.Class.MonadReader r (Control.Monad.Trans.Free.FreeT f m)
+ Control.Monad.Trans.Free: instance (GHC.Base.Functor f, GHC.Base.Functor m, Control.Monad.Writer.Class.MonadWriter w m) => Control.Monad.Writer.Class.MonadWriter w (Control.Monad.Trans.Free.FreeT f m)
+ Control.Monad.Trans.Free: instance GHC.Base.Functor f => Control.Monad.Trans.Class.MonadTrans (Control.Monad.Trans.Free.FreeT f)
+ Control.Monad.Trans.Free.Ap: instance GHC.Base.Applicative f => Control.Monad.Trans.Class.MonadTrans (Control.Monad.Trans.Free.Ap.FreeT f)
+ Control.Monad.Trans.Free.Church: instance (GHC.Base.Functor f, GHC.Base.Functor m, Control.Monad.Writer.Class.MonadWriter w m) => Control.Monad.Writer.Class.MonadWriter w (Control.Monad.Trans.Free.Church.FT f m)
- Control.Monad.Trans.Free: hoistFreeT :: (Monad m, Functor f) => (forall a. m a -> n a) -> FreeT f m b -> FreeT f n b
+ Control.Monad.Trans.Free: hoistFreeT :: (Functor m, Functor f) => (forall a. m a -> n a) -> FreeT f m b -> FreeT f n b
- Control.Monad.Trans.Free.Ap: hoistFreeT :: (Monad m, Applicative f) => (forall a. m a -> n a) -> FreeT f m b -> FreeT f n b
+ Control.Monad.Trans.Free.Ap: hoistFreeT :: (Functor m, Applicative f) => (forall a. m a -> n a) -> FreeT f m b -> FreeT f n b

Files

CHANGELOG.markdown view
@@ -1,3 +1,10 @@+5.1.8 [2022.05.07]+------------------+* Generalize the `Monad` constraint in the type signatures for+  `hoistFreeT` in `Control.Monad.Trans.Free` and `Control.Monad.Trans.Free.Ap`+  to a `Functor` constraint.+* Allow building with `transformers-0.6.*` and `mtl-2.3.*`.+ 5.1.7 [2021.04.30] ------------------ * Enable `FlexibleContexts` in `Control.Monad.Trans.Free.Church` to allow
examples/MandelbrotIter.lhs view
@@ -6,8 +6,9 @@ > module Main where  > import Control.Arrow hiding (loop)+> import Control.Monad.IO.Class (MonadIO(..)) > import Control.Monad.Trans.Iter-> import "mtl" Control.Monad.Reader+> import "mtl" Control.Monad.Reader (ReaderT, runReaderT, asks) > import Data.Complex > import Graphics.HGL (runGraphics, Window, withPen, >                      line, RGB (RGB), RedrawMode (DoubleBuffered), openWindowEx,
examples/PerfTH.hs view
@@ -10,11 +10,12 @@ import Data.IORef import Data.Word import Control.Monad-import Control.Monad.State.Strict+import Control.Monad.IO.Class (MonadIO(..)) import qualified Control.Monad.Fail as Fail (MonadFail) import Control.Monad.Free import Control.Monad.Free.TH import qualified Control.Monad.Free.Church as Church+import Control.Monad.Trans.State.Strict import Text.Printf  -- | A data type representing basic commands for our performance-testing eDSL.
examples/ValidationForm.hs view
@@ -5,7 +5,8 @@ import Control.Applicative #endif import Control.Applicative.Free-import Control.Monad.State+import Control.Monad.IO.Class (MonadIO(..))+import Control.Monad.Trans.State  import Data.Monoid (Sum(..)) 
examples/free-examples.cabal view
@@ -19,8 +19,9 @@              , GHC == 8.4.4              , GHC == 8.6.5              , GHC == 8.8.4-             , GHC == 8.10.4-             , GHC == 9.0.1+             , GHC == 8.10.7+             , GHC == 9.0.2+             , GHC == 9.2.2 synopsis:      Monads for free description:   Examples projects using @free@ build-type:    Simple@@ -31,7 +32,6 @@  flag mandelbrot-iter   default: True-  manual:  True  library   hs-source-dirs: .@@ -42,8 +42,8 @@     base         == 4.*,     base-compat  >= 0.6,     free,-    mtl          >= 2.0.1 && < 2.3,-    transformers >= 0.2   && < 0.6+    mtl          >= 2.0.1 && < 2.4,+    transformers >= 0.2   && < 0.7  executable free-mandelbrot-iter   if !flag(mandelbrot-iter)@@ -53,11 +53,14 @@   main-is: MandelbrotIter.lhs   ghc-options: -Wall   build-depends:-    base == 4.*,+    -- This unusually restrictive lower version bound on base is a workaround+    -- for the fact that X11-1.10 does not build correctly on older versions of+    -- base (see https://github.com/ekmett/free/runs/3235998897#step:18:237)+    base >= 4.9 && < 5,     free,     HGL          >= 3.2.3.2,-    mtl          >= 2.0.1 && < 2.3,-    transformers >= 0.2   && < 0.6+    mtl          >= 2.0.1 && < 2.4,+    transformers >= 0.2   && < 0.7  executable free-newton-coiter   hs-source-dirs: .@@ -79,9 +82,8 @@     base         == 4.*,     fail         == 4.9.*,     free,-    mtl          >= 2.0.1 && < 2.3,     rdtsc,-    transformers >= 0.2   && < 0.6+    transformers >= 0.2   && < 0.7  executable free-retry-th   hs-source-dirs: .@@ -93,8 +95,8 @@     base-compat         >= 0.6,     fail                == 4.9.*,     free,-    transformers        >= 0.2   && < 0.6,-    transformers-compat >= 0.6.4 && < 0.7+    transformers        >= 0.2   && < 0.7,+    transformers-compat >= 0.6.4 && < 0.8  executable free-teletype   hs-source-dirs: .@@ -116,4 +118,4 @@     base        == 4.*,     base-compat >= 0.6,     free,-    mtl         >= 2.0.1 && < 2.3+    transformers >= 0.2 && < 0.7
free.cabal view
@@ -1,6 +1,6 @@ name:          free category:      Control, Monads-version:       5.1.7+version:       5.1.8 license:       BSD3 cabal-version: 1.18 license-file:  LICENSE@@ -19,8 +19,9 @@              , GHC == 8.4.4              , GHC == 8.6.5              , GHC == 8.8.4-             , GHC == 8.10.4-             , GHC == 9.0.1+             , GHC == 8.10.7+             , GHC == 9.0.2+             , GHC == 9.2.2 synopsis:      Monads for free description:   Free monads are useful for many tree-like structures and domain specific languages.@@ -89,7 +90,7 @@     indexed-traversable  >= 0.1.1   && < 0.2,     semigroupoids        >= 5.3.5   && < 6,     th-abstraction       >= 0.4.2.0 && < 0.5,-    transformers         >= 0.3     && < 0.6,+    transformers         >= 0.3     && < 0.7,     transformers-base    >= 0.4.5.2 && < 0.5,     template-haskell     >= 2.7.0.0 && < 2.19 @@ -97,10 +98,10 @@   -- mtl-2.2.* requires transformers >=0.4   if impl(ghc >=7.10)     build-depends:-      mtl               >= 2.2.2 && < 2.3+      mtl               >= 2.2.2 && < 2.4   else     build-depends:-      mtl               >= 2.1.3.1 && < 2.3+      mtl               >= 2.1.3.1 && < 2.4    -- recent profunctors dropped support for GHCs older than 7.8   if impl(ghc >=7.8)@@ -120,7 +121,7 @@   if impl(ghc >= 7.10)     build-depends: transformers >= 0.4.2.0   else-    build-depends: transformers-compat >= 0.5.1.0 && <0.7+    build-depends: transformers-compat >= 0.5.1.0 && <0.8    exposed-modules:     Control.Applicative.Free
src/Control/Monad/Free/Class.hs view
@@ -3,13 +3,15 @@ {-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE Safe #-}+{-# LANGUAGE TypeOperators #-} {-# LANGUAGE UndecidableInstances #-} #if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 704 {-# LANGUAGE DefaultSignatures #-} {-# LANGUAGE TypeFamilies #-} #endif+#if !(MIN_VERSION_transformers(0,6,0)) {-# OPTIONS_GHC -fno-warn-deprecations #-}-{-# LANGUAGE Safe #-}+#endif #include "free-common.h"  -----------------------------------------------------------------------------@@ -41,11 +43,14 @@ import qualified Control.Monad.Trans.RWS.Lazy as Lazy import Control.Monad.Trans.Cont import Control.Monad.Trans.Maybe-import Control.Monad.Trans.List-import Control.Monad.Trans.Error import Control.Monad.Trans.Except import Control.Monad.Trans.Identity +#if !(MIN_VERSION_transformers(0,6,0))+import Control.Monad.Trans.Error+import Control.Monad.Trans.List+#endif+ #if !(MIN_VERSION_base(4,8,0)) import Control.Applicative import Data.Monoid@@ -139,17 +144,19 @@ instance (Functor f, MonadFree f m) => MonadFree f (IdentityT m) where   wrap = IdentityT . wrap . fmap runIdentityT -instance (Functor f, MonadFree f m) => MonadFree f (ListT m) where-  wrap = ListT . wrap . fmap runListT--instance (Functor f, MonadFree f m, Error e) => MonadFree f (ErrorT e m) where-  wrap = ErrorT . wrap . fmap runErrorT- instance (Functor f, MonadFree f m) => MonadFree f (ExceptT e m) where   wrap = ExceptT . wrap . fmap runExceptT  -- instance (Functor f, MonadFree f m) => MonadFree f (EitherT e m) where --   wrap = EitherT . wrap . fmap runEitherT++#if !(MIN_VERSION_transformers(0,6,0))+instance (Functor f, MonadFree f m, Error e) => MonadFree f (ErrorT e m) where+  wrap = ErrorT . wrap . fmap runErrorT++instance (Functor f, MonadFree f m) => MonadFree f (ListT m) where+  wrap = ListT . wrap . fmap runListT+#endif  -- | A version of lift that can be used with just a Functor for f. liftF :: (Functor f, MonadFree f m) => f a -> m a
src/Control/Monad/Trans/Free.hs view
@@ -319,7 +319,7 @@ instance (Functor f, Fail.MonadFail m) => Fail.MonadFail (FreeT f m) where   fail e = FreeT (Fail.fail e) -instance MonadTrans (FreeT f) where+instance Functor f => MonadTrans (FreeT f) where   lift = FreeT . liftM Pure   {-# INLINE lift #-} @@ -331,13 +331,13 @@   liftBase = lift . liftBase   {-# INLINE liftBase #-} -instance (Functor f, MonadReader r m) => MonadReader r (FreeT f m) where+instance (Functor f, Functor m, MonadReader r m) => MonadReader r (FreeT f m) where   ask = lift ask   {-# INLINE ask #-}   local f = hoistFreeT (local f)   {-# INLINE local #-} -instance (Functor f, MonadWriter w m) => MonadWriter w (FreeT f m) where+instance (Functor f, Functor m, MonadWriter w m) => MonadWriter w (FreeT f m) where   tell = lift . tell   {-# INLINE tell #-}   listen (FreeT m) = FreeT $ liftM concat' $ listen (fmap listen `liftM` m)@@ -421,9 +421,9 @@  -- | Lift a monad homomorphism from @m@ to @n@ into a monad homomorphism from @'FreeT' f m@ to @'FreeT' f n@ ----- @'hoistFreeT' :: ('Monad' m, 'Functor' f) => (m ~> n) -> 'FreeT' f m ~> 'FreeT' f n@-hoistFreeT :: (Monad m, Functor f) => (forall a. m a -> n a) -> FreeT f m b -> FreeT f n b-hoistFreeT mh = FreeT . mh . liftM (fmap (hoistFreeT mh)) . runFreeT+-- @'hoistFreeT' :: ('Functor' m, 'Functor' f) => (m ~> n) -> 'FreeT' f m ~> 'FreeT' f n@+hoistFreeT :: (Functor m, Functor f) => (forall a. m a -> n a) -> FreeT f m b -> FreeT f n b+hoistFreeT mh = FreeT . mh . fmap (fmap (hoistFreeT mh)) . runFreeT  -- | The very definition of a free monad transformer is that given a natural -- transformation you get a monad transformer homomorphism.
src/Control/Monad/Trans/Free/Ap.hs view
@@ -318,7 +318,7 @@ instance (Applicative f, Applicative m, Fail.MonadFail m) => Fail.MonadFail (FreeT f m) where   fail e = FreeT (Fail.fail e) -instance MonadTrans (FreeT f) where+instance Applicative f => MonadTrans (FreeT f) where   lift = FreeT . liftM Pure   {-# INLINE lift #-} @@ -418,9 +418,9 @@  -- | Lift a monad homomorphism from @m@ to @n@ into a monad homomorphism from @'FreeT' f m@ to @'FreeT' f n@ ----- @'hoistFreeT' :: ('Monad' m, 'Functor' f) => (m ~> n) -> 'FreeT' f m ~> 'FreeT' f n@-hoistFreeT :: (Monad m, Applicative f) => (forall a. m a -> n a) -> FreeT f m b -> FreeT f n b-hoistFreeT mh = FreeT . mh . liftM (fmap (hoistFreeT mh)) . runFreeT+-- @'hoistFreeT' :: ('Functor' m, 'Applicative' f) => (m ~> n) -> 'FreeT' f m ~> 'FreeT' f n@+hoistFreeT :: (Functor m, Applicative f) => (forall a. m a -> n a) -> FreeT f m b -> FreeT f n b+hoistFreeT mh = FreeT . mh . fmap (fmap (hoistFreeT mh)) . runFreeT  -- | Lift an applicative homomorphism from @f@ to @g@ into a monad homomorphism from @'FreeT' f m@ to @'FreeT' g m@ transFreeT :: (Monad m, Applicative g) => (forall a. f a -> g a) -> FreeT f m b -> FreeT g m b
src/Control/Monad/Trans/Free/Church.hs view
@@ -172,7 +172,7 @@   local f = hoistFT (local f)   {-# INLINE local #-} -instance (Functor f, MonadWriter w m) => MonadWriter w (FT f m) where+instance (Functor f, Functor m, MonadWriter w m) => MonadWriter w (FT f m) where   tell = lift . tell   {-# INLINE tell #-}   listen = toFT . listen . fromFT