chan-split: Concurrent Chans as read/write pairs. Also provides generic Chan pair class.

[ bsd3, concurrency, library ] [ Propose Tags ]

An implementation of concurrent channels identical to Control.Concurrent.Chan, except that the channel is represented as a pair, one of which allows only read operations, the other write operations.

This makes code easier to reason about (the types strictly delegate read/write permission), suggests useful instances (e.g. Functor and Contravariant are easily defined) on the chan pairs, and simplifies the API.

Furthermore this allows messages sent to channels with no readers to be trivially garbage-collected, without relying on inlining optimizations.

We also provide a module that defines a class SplitChan which defines the basic methods any pair of Chan types should provide, allowing easy swapping of Chan implementations.

To use standard Chans with these polymorphic functions, import as follows:

import Control.Concurrent.Chan hiding (readChan,writeChan,writeList2Chan)
import Control.Concurrent.Chan.Class

When used alongside standard Chans, the Split module can be imported qualified like:

import qualified Control.Concurrent.Chan.Split as S

Its interface is mostly backwards compatible with Chan. Note, we do not implement the deprecated unGetChan and isEmptyChan functions.

This module is used internally by the "simple-actors" package.

CHANGES: 0.4.0 -> 0.5.0

  • modify TChan v2.4 code into split version

  • depend on STM

  • clean up Extensions section and broken links


Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


  • No Candidates
Versions [RSS] 0.1.2, 0.1.3, 0.2.0, 0.3.0, 0.4.0, 0.5.0
Dependencies base (>=4 && <5), stm (>2 && <3) [details]
License BSD-3-Clause
Author Brandon Simmons
Category Concurrency
Home page
Source repo head: git clone
Uploaded by BrandonSimmons at 2012-10-27T00:01:29Z
Distributions NixOS:0.5.0
Reverse Dependencies 2 direct, 0 indirect [details]
Downloads 5107 total (13 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs uploaded by user
Build status unknown [no reports yet]