streams: Various Haskell 2010 stream comonads
|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, 188.8.131.52, 3.0.1, 184.108.40.206, 3.1, 3.1.1, 3.2, 3.2.1, 3.3|
|Dependencies||base (>=4 && <4.4), comonad (==0.9.*), distributive (==0.1.*), functor‑apply (==0.10.*), semigroups (>=0.3.4 && <0.4) [details]|
|Copyright||Copyright 2011 Edward Kmett Copyright 2010 Tony Morris, Oliver Taylor, Eelis van der Weegen Copyright 2007-2010 Wouter Swierstra, Bas van Dijk|
|Author||Edward A. Kmett|
|Maintainer||Edward A. Kmett <email@example.com>|
|Source repo||head: git clone git://github.com/ekmett/streams.git|
|Uploaded||by EdwardKmett at Sat Jan 29 11:41:29 UTC 2011|
|Distributions||LTSHaskell:3.3, NixOS:3.3, Stackage:3.3, openSUSE:3.3|
|Downloads||11932 total (96 in the last 30 days)|
|Rating||2.0 (votes: 1) [estimated by rule of succession]|
|Status||Docs uploaded by user
Build status unknown [no reports yet]
Hackage Matrix CI
Various Haskell 2010 stream comonads.
Data.Stream.Branching provides an "f-Branching Stream" comonad, aka the cofree comonad, or generalized rose tree.
data Stream f a = a :< f (Stream a)
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
Applicativeinstance 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.consless productive. Where applicable Data.Stream.Infinite.Skew may be more efficient, due to a lazier and more efficient
Data.Stream.NonEmpty provides a non-empty list comonad where the Applicative and Monad work like those of the
[a]. Being non-empty, it trades in the
[a]for weaker append-based
Semigroupinstances while becoming a member of
ComonadApply. Acting like a list, the semantics of
<.>take a cross-product of membership from both
NonEmptylists rather than zipping like a
data NonEmpty a = a :| [a]
Data.Stream.Infinite provides a coinductive infinite anti-causal stream. The
Comonadprovides access to the tail of the stream and the
Applicativezips 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
Streamas a isomorphic to the reader monad from the natural numbers. Being infinite in length, there is no
Alternativeinstance, but instead the
FunctorAltinstance provides access to the
Semigroupof 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
Applicativeinstance 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.5: * Data.Stream.Supply added Changes since 0.1:
A number of strictness issues with
[Skip to Readme]
For package maintainers and hackage trustees