The distributive package

[ Tags: bsd3, data-structures, library ] [ Propose Tags ]

Distributive functors -- Dual to Traversable

[Skip to Readme]


Versions 0.1, 0.1.1, 0.1.2, 0.2.0,, 0.2.1, 0.2.2, 0.3, 0.3.1, 0.3.2, 0.4, 0.4.1, 0.4.2, 0.4.3,,, 0.4.4, 0.5,,, 0.5.1, 0.5.2, 0.5.3
Change log CHANGELOG.markdown
Dependencies base (>=4.0 && <5), tagged (>=0.7 && <1), transformers (>=0.2 && <0.4), transformers-compat (==0.1.*) [details]
License BSD3
Copyright Copyright (C) 2011-2014 Edward A. Kmett
Author Edward A. Kmett
Maintainer Edward A. Kmett <>
Category Data Structures
Home page
Bug tracker
Source repo head: git clone git://
Uploaded Wed Apr 2 19:14:00 UTC 2014 by EdwardKmett
Updated Wed Jan 7 22:52:00 UTC 2015 by HerbertValerioRiedel to revision 1   [What is this?]
Distributions Arch:0.5.3, Debian:0.4.4, Fedora:0.5.3, FreeBSD:0.4.4, LTSHaskell:0.5.3, NixOS:0.5.3, Stackage:0.5.3, openSUSE:0.5.3
Downloads 198260 total (335 in the last 30 days)
Rating 2.0 (votes: 1) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Successful builds reported [all 1 reports]
Hackage Matrix CI





Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info


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

Readme for distributive-0.4.3

[back to package description]


Build Status

This package provides the notion that is categorically dual to Traversable.

A Distributive Functor is one that you can push any functor inside of.

distribute :: (Functor f, Distributive g) => f (g a) -> g (f a)

Compare this with the corresponding Traversable notion, sequenceA.

sequenceA :: (Applicative f, Traversable g) => g (f a) -> f (g a)

This package includes instances for common types, and includes other methods similar to traverse which fuse the use of fmap.

We only require Functor rather than some dual notion to Applicative, because the latter cannot meaningfully exist in Haskell since all comonoids there are trivial.

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