Semigroupoids: Category sans id

Version on this page:
LTS Haskell 19.7:5.3.7
Stackage Nightly 2022-05-14:5.3.7
Latest on Hackage:5.3.7

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-,6529


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


  • 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