free-functors: Free functors, adjoint to functors that forget class constraints.

[ bsd3, data, library, math ] [ Propose Tags ]

A free functor is a left adjoint to a forgetful functor. It used to be the case that the only category that was easy to work with in Haskell was Hask itself, so there were no interesting forgetful functors.

But the new ConstraintKinds feature of GHC provides an easy way of creating subcategories of Hask. That brings interesting opportunities for free (and cofree) functors.

The examples directory contains an implementation of non-empty lists as free semigroups, and automata as free actions. The standard example of free higher order functors is free monads, and this definition can be found in Data.Functor.HFree.

Versions 0, 0.1, 0.1.1, 0.1.2, 0.2, 0.3, 0.4, 0.4.1, 0.5, 0.6, 0.6.1,, 0.6.2, 0.6.3,,,, 0.6.4,, 0.6.5, 0.7, 0.7.1, 0.7.2, 0.8, 0.8.1, 0.8.2, 0.8.3, 0.8.4
Change log CHANGELOG
Dependencies algebraic-classes (==0.9.*), base (==4.11.*), bifunctors (==5.*), comonad (==5.*), constraints (==0.10.*), contravariant (==1.5.*), profunctors (==5.*), template-haskell (==2.13.*), transformers (==0.5.*) [details]
License BSD-3-Clause
Author Sjoerd Visscher
Revised Revision 1 made by SjoerdVisscher at Sun Jul 15 13:15:40 UTC 2018
Category Data, Math
Home page
Bug tracker
Source repo head: git clone git://
Uploaded by SjoerdVisscher at Sun Mar 11 21:22:10 UTC 2018
Distributions NixOS:0.8.4
Downloads 7894 total (18 in the last 30 days)
Rating (no votes yet) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Docs not available [build log]
All reported builds failed as of 2018-03-11 [all 3 reports]
Hackage Matrix CI


  • Data
    • Constraint
      • Data.Constraint.Class1
    • Functor
      • Data.Functor.Cofree
      • Data.Functor.Free
      • Data.Functor.HCofree
      • Data.Functor.HFree
      • Data.Functor.HHCofree
      • Data.Functor.HHFree


Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

For package maintainers and hackage trustees