Hackage Build Status

This package provides a common definitions for working with free monads, free applicatives, and cofree comonads in Haskell.

Contact Information

Contributions and bug reports are welcome!

Please feel free to contact me through github or on the #haskell IRC channel on

-Edward Kmett


5.2 [2023.03.12]

  • Drop support for GHC 7.10 and earlier.
  • Drop redundant Monad constraints on many functions and instances. These constraints were only present for compatibility with pre-7.10 versions of GHC, which free no longer supports.
  • Add Eq, Eq1, Ord, Ord1, and Foldable instances for Ap in Control.Applicative.Free.
  • Switch out bifunctors dependency for bifunctor-classes-compat.

5.1.10 [2022.11.30]

  • Add a MonadFail instance for FT.

5.1.9 [2022.06.26]

  • Simplify the Eq and Ord instances for FT to avoid the use of overlapping instances.

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 building with GHC 9.2.

5.1.6 [2020.12.31]

  • Explicitly mark modules as Safe.

5.1.5 [2020.12.16]

  • Move indexed-traversable (FunctorWithIndex etc) instances from lens.

5.1.4 [2020.10.01]

  • Allow building with template-haskell- (GHC 9.0).

5.1.3 [2019.11.26]

  • Allow building with template-haskell-2.16 (GHC 8.10).
  • Add Eq{1,2}, Ord{1,2}, Read{1,2}, and Show{1,2} instances for CofreeF.

5.1.2 [2019.08.27]

  • Implement more performant versions of some and many in the Alternative instance for the final Alt encoding.

5.1.1 [2019.05.02]

  • Allow building with base-4.13 (GHC 8.8).

5.1 [2018.07.03]

  • Generalize the type of _Free.
  • Allow building with containers-0.6.
  • Avoid incurring some dependencies when using recent GHCs.

5.0.2 [2018.04.25]

  • Add Generic and Generic1 instances where possible.

5.0.1 [2018.03.07]

  • Fix the build on old GHCs with transformers-0.4.

5 [2018.01.28]

  • Add a Semigroup instance for IterT.

  • Add MonadFail instances for IterT and FreeT.

  • Add a Comonad instance for the free Applicative, Ap.

  • Add Control.Monad.Free.Ap and Control.Monad.Trans.Free.Ap modules, based on the “Applicative Effects in Free Monads” series of articles by Will Fancher.

  • Derive Data instances for Free and Cofree.

  • Control.Monad.Free.TH now properly supports template-haskell- In particular, it now supports GadtC and RecGadtC, which are new template-haskell forms for representing GADTs.

  • Add telescoped_, shoots, and leaves to Control.Comonad.Cofree

  • Add the Control.Applicative.Free.Fast module, based on Dave Menendez’s article “Free Applicative Functors in Haskell”

  • Add foldFreeT to Control.Monad.Trans.Free

  • Improve the foldMap and cutoff functions for Control.Monad.Free.Church.F, and add a Traversable

  • Add a MonadBase instance for FreeT

  • Add a performance test comparing Free and Church interpreters

  • The use of prelude-extras has been removed. free now uses the Data.Functor.Classes module to give free’s datatypes instances of Eq1, Ord1, Read1, and Show1. Their Eq, Ord, Read, and Show instances have also been modified to incorporate these classes. For example, what previously existed as:

    instance (Eq (f (Free f a)), Eq a) => Eq (Free f a) where

    has now been changed to:

    instance (Eq1 f, Eq a) => Eq (Free f a) where
  • Remove redundant Functor constraints from Control.Alternative.Free


  • Removed a number of spurious class constraints.
  • Support GHC 8


  • Support comonad 5


  • Add instances for ExceptT: like ErrorT, but without an Error constraint.
  • Support containers
  • Support transformers 0.5


  • Support GHC 7.4


  • Add instances of MonadCatch and MonadThrow from exceptions to FT, FreeT and IterT.
  • semigroupoids 5, profunctors 5, and bifunctors 5 support.


  • Pass Monad[FreeT].fail into underlying monad
  • Add retractT.
  • Added cutoff for the church encoded free monad.
  • cutoff now accepts negative numbers.
  • Added intersperseT and intercalateT.
  • Added foldFree and foldF.
  • Added some new template-haskell toys.

  • Fix for very old cabal versions where the MIN_VERSION_foo macros aren’t negation friendly.


  • Redefine Alternative and MonadPlus instances of IterT so that they apply to any underlying Monad. mplus or <|> is Capretta’s race combinator; mzero or empty is a non-terminating computation.
  • Redefine fail s for IterT as mzero, for any string s.
  • Added Control.Monad.Trans.Iter.untilJust, which repeatedly retries a m (Maybe a) computation until it produces Just a value.
  • Fix things so that we can build with GHC 7.10, which also uses the name Alt in Data.Monoid, and which exports Monoid from Prelude.


  • Remove either support. Why? It dragged in a large number of dependencies we otherwise don’t support, and so is probably best inverted.

  • Allow complation with older versions of base. (Foldable didn’t add foldl’ until base 4.6)


  • Added a MonadFree instance for EitherT (frrom the either package).
  • Support for transformers 0.4


  • Added more versions of cutoff.


  • Added prelude-extras support. This makes it possible to work without UndecidableInstances for most operations.
  • Removed the GHC_TYPEABLE flag.


  • Added hoistF


  • Víctor López Juan and Fabian Ruch added many documentation improvements and a whole host of proofs of correctness.
  • Improvements in the template haskell code generator.
  • Added instances for MonadWriter and MonadCont where appropriate, thanks to Nickolay Kudasov.
  • Added cutoff, iterTM, and never.
  • Made modifications to some Typeable and Data instances to work correctly on both GHC 7.8.1rc1 and 7.8.1rc2.
  • Removed Control.MonadPlus.Free. Use FreeT f [] instead and the result will be law-abiding.
  • Replaced Control.Alternative.Free with a new approach that is law-abiding for left-distributive Alternatives.


  • Added Control.Monad.Free.TH with makeFree to make it easier to write free monads.
  • Added missing instances for MonadFix and MonadCont where appropriate.


  • Added Control.Monad.Trans.Iter and Control.Comonad.Trans.Coiter.


  • Added a default signature to wrap, based on a construction by @fizruk.


  • Updated to work with semigroupoids and comonad 4.0
  • instance ComonadCofree Maybe NonEmpty
  • instance ComonadCofree (Const b) ((,) b)


  • Generalized liftF.
  • Added iterM


  • Added support for GHC 7.7’s polykinded Typeable


  • Added instance MonadFree f (ContT r m)


  • Refactored build system
  • Removed upper bounds on my own intra-package dependencies


  • Added Control.Alternative.Free and Control.MonadPlus.Free


  • Added Control.Free.Applicative
  • Moved Control.Monad.Free.Church from kan-extensions into this package.