Semigroupoids: Category sans id

Version on this page:5.2.1@rev:4
LTS Haskell 22.25:6.0.1
Stackage Nightly 2024-06-15:6.0.1
Latest on Hackage:6.0.1

See all snapshots semigroupoids appears in

BSD-3-Clause licensed by Edward A. Kmett
Maintained by Edward A. Kmett
This version can be pinned in stack with:semigroupoids-5.2.1@sha256:539f69950ed75adc200e3c2566140b2916241d5a216b4d180c62082bf618ec47,7255


Hackage Build Status

A semigroupoid is a Category without id.

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



  • Add the toNonEmpty method to Foldable1. Add foldrM1 and foldlM1 functions to Data.Semigroup.Foldable that are defined in terms of toNonEmpty.
  • Add Apply, Bind, Foldable1, and Traversable1 instances for Complex
  • Add Apply and Bind instances for HashMap from the unordered-containers package (on which semigroupoids now depends)
  • Add Semigroupoid instances for Tagged and Const


  • Revamp Setup.hs to use cabal-doctest. This makes it build with Cabal-1.25, and makes the doctests work with cabal new-build and sandboxes.
  • Added instances to Alt, Plus, Apply, Bind and Extend for GHC.Generics, Tagged and Proxy where appropriate.


  • The remaining orphan instances in Data.Traversable.Instances have been replaced in favor of the orphan instances from transformers-compat-0.5.
  • The documentation now states laws that instances of Apply are expected to uphold.
  • doctest-0.11 support
  • Fixed compilation of tests with stack


  • transformers-compat 0.5 support
  • Removed some redundant constraints.
  • GHC 8 support

  • doctest 0.10 support

  • Bugfix for GHC 7.4. PolyKinds on 7.4 cause all sorts of haskell interface file errors. One of the #if guards that turned it off on 7.4 was missing and has been fixed.

  • Added the CHANGELOG to the distribution so that hackage can link to it in the haddocks.


  • Absorbed Data.Bifunctor.Apply, Data.Semigroup.Bifoldable and Data.Semigroup.Traversable from bifunctors.
  • This caused us to pick up a dependency on tagged.
  • Exiled Data.Semifunctor.*, Data.Semigroupoid.Product and Data.Semigroupoid.Coproduct to semigroupoid-extras.
  • This let us open up to older versions of GHC again.
  • Set an explicit fixity for -<- and ->-.


  • Major changes to the API to support PolyKinds and DataKinds. This necessarily shuts off GHC <= 7.4.
  • Orphan instances have moved upstream into a common base-orphans package.


  • Added asum1 to Data.Semigroup.Foldable.

  • Support for ‘ConstrainedClassMethods’ is currently required for GHC HEAD.


  • Added missing instances for ExceptT. Obtain it via transformers-compat if need be for old transformers versions.
  • Several Bind and Apply instances now require somewhat more minimal contexts.


  • Backported Foldable/Traversable instances from lens


  • Foldable1/Traversable1 for tuples


  • contravariant 1.0 support.


  • Added flags to provide unsupported cabal sandbox build modes.


  • Fixed bitrot in the Data.Functor.Extend documentation.
  • Fixed warnings on GHC 7.8.1rc2 caused by importing Control.Monad.Instances.


  • Merged in the contents of the groupoids and semigroupoid-extras packages.


  • Added the rectangular band Semigroupoid for (,). Would that make it a Bandoid?


  • Claim to be Trustworthy where necessary


  • Tightened the upper bounds slightly to enable PVP compliance while retaining a flexible development cycle.
  • Raised the upper bound on contravariant.


  • Removed upper bounds relative to my other packages
  • Refactored directory layout