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 +7/−0
- examples/MandelbrotIter.lhs +2/−1
- examples/PerfTH.hs +2/−1
- examples/ValidationForm.hs +2/−1
- examples/free-examples.cabal +15/−13
- free.cabal +8/−7
- src/Control/Monad/Free/Class.hs +16/−9
- src/Control/Monad/Trans/Free.hs +6/−6
- src/Control/Monad/Trans/Free/Ap.hs +4/−4
- src/Control/Monad/Trans/Free/Church.hs +1/−1
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