# The streams package

Various Haskell 2010 stream comonads.
* `Data.Stream.Future` provides a coinductive anti-causal stream, or non-empty `ZipList`. The comonad provides access to only the
tail of the stream. Like a conventional `ZipList`, this is *not* a monad.

data Future a = Last a | a :< Future a

`Data.Stream.Future.Skew`provides a non-empty skew-binary random-access-list with the semantics of`Data.Stream.Future`. As with`Data.Stream.Future`this stream is not a`Monad`, since the`Applicative`instance zips streams of potentially differing lengths. The random-access-list structure provides a number of operations logarithmic access time, but makes`Data.Stream.Future.Skew.cons`less productive. Where applicable`Data.Stream.Infinite.Skew`may be more efficient, due to a lazier and more efficient`Applicative`instance.

`Data.Stream.Infinite`provides a coinductive infinite anti-causal stream. The`Comonad`provides access to the tail of the stream and the`Applicative`zips streams together. Unlike`Future`, infinite stream form a`Monad`. The monad diagonalizes the`Stream`, which is consistent with the behavior of the`Applicative`, and the view of a`Stream`as a isomorphic to the reader monad from the natural numbers. Being infinite in length, there is no`Alternative`instance, but instead the`FunctorAlt`instance provides access to the`Semigroup`of interleaving streams.

data Stream a = a :< Stream a

`Data.Stream.Infinite.Skew`provides an infinite skew-binary random-access-list with the semantics of`Data.Stream.Infinite`Since every stream is infinite, the`Applicative`instance can be considerably less strict than the corresponding instance for`Data.Stream.Future.Skew`and performs asymptotically better.

`Data.Stream.Infinite.Functional.Zipper`provides a bi-infinite sequence, represented as a pure function with an accumulating parameter added to optimize moving the current focus.

data Zipper a = !Integer :~ (Integer -> a)

`Data.Stream.Supply`provides a comonadic supply of unique values, which are generated impurely as the tree is explored.

*Changes since 0.6.3*:

`Data.Stream.NonEmpty`renamed to`Data.List.NonEmpty`and pushed upstream into the semigroups package.

*Changes since 0.5.1*:

Removed a redundant UNPACK pragma

*Changes since 0.5*:

Data.Stream.Supply added

*Changes since 0.1*:

A number of strictness issues with

`NonEmpty`were fixedMore documentation

[Skip to Readme]

## Properties

Versions | 0.1.1, 0.2, 0.3, 0.3.1, 0.4, 0.5.0, 0.5.1, 0.5.1.1, 0.5.1.2, 0.6.0, 0.6.0.1, 0.6.1.1, 0.6.1.2, 0.6.3, 0.7.0, 0.7.1, 0.7.2, 0.8.0, 0.8.0.1, 0.8.0.2, 0.8.0.3, 0.8.0.4, 0.8.1, 0.8.2, 3.0, 3.0.0.1, 3.0.1, 3.0.1.1, 3.1, 3.1.1, 3.2, 3.2.1, 3.3 |
---|---|

Dependencies | base (==4.*), comonad (>=1.1.1 && <1.2), distributive (==0.2.*), semigroupoids (>=1.2.4 && <1.3), semigroups (==0.8.*) [details] |

License | BSD3 |

Copyright | Copyright 2011 Edward Kmett Copyright 2010 Tony Morris, Oliver Taylor, Eelis van der Weegen Copyright 2007-2010 Wouter Swierstra, Bas van Dijk Copyright 2008 Iavor S. Diatchki |

Author | Edward A. Kmett |

Maintainer | Edward A. Kmett <ekmett@gmail.com> |

Stability | provisional |

Category | Control, Comonads |

Home page | http://github.com/ekmett/streams |

Source repository | head: git clone git://github.com/ekmett/streams.git |

Uploaded | Mon Aug 15 23:48:54 UTC 2011 by EdwardKmett |

Distributions | LTSHaskell:3.2.1, NixOS:3.3, Stackage:3.3, Tumbleweed:3.2.1 |

Downloads | 6086 total (61 in the last 30 days) |

Votes | |

Status | Docs uploaded by user Build status unknown [no reports yet] |

## Downloads

- streams-0.8.1.tar.gz [browse] (Cabal source package)
- Package description (included in the package)