name: streams category: Control, Comonads version: 3.3 license: BSD3 cabal-version: >= 1.6 license-file: LICENSE author: Edward A. Kmett maintainer: Edward A. Kmett stability: provisional homepage: http://github.com/ekmett/streams homepage: http://github.com/ekmett/streams/issues copyright: Copyright 2011-2013 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 synopsis: Various Haskell 2010 stream comonads build-type: Simple extra-source-files: CHANGELOG.markdown README .ghci .gitignore .travis.yml .vim.custom description: 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. . > 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. source-repository head type: git location: git://github.com/ekmett/streams.git library other-extensions: PatternGuards BangPatterns build-depends: base >= 4 && < 5, adjunctions >= 4.0.1 && < 5, comonad >= 4 && < 6, distributive >= 0.2.1 && < 1, semigroupoids >= 4 && < 6, semigroups >= 0.8.3.1 && < 1 extensions: CPP if impl(ghc) cpp-options: -DLANGUAGE_DeriveDataTypeable extensions: FlexibleContexts, DeriveDataTypeable exposed-modules: Data.Stream.Future Data.Stream.Future.Skew Data.Stream.Infinite Data.Stream.Infinite.Skew Data.Stream.Infinite.Functional.Zipper Data.Stream.Supply hs-source-dirs: src ghc-options: -Wall