streams-3.3.2: streams.cabal
name: streams
category: Control, Comonads
version: 3.3.2
license: BSD3
cabal-version: >= 1.10
license-file: LICENSE
author: Edward A. Kmett
maintainer: Edward A. Kmett <ekmett@gmail.com>
stability: provisional
homepage: http://github.com/ekmett/streams
bug-reports: 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
.gitignore
.vim.custom
tested-with: GHC == 7.4.2
, GHC == 7.6.3
, GHC == 7.8.4
, GHC == 7.10.3
, GHC == 8.0.2
, GHC == 8.2.2
, GHC == 8.4.4
, GHC == 8.6.5
, GHC == 8.8.4
, GHC == 8.10.7
, GHC == 9.0.2
, GHC == 9.2.2
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,
boring >= 0.2 && < 0.3,
comonad >= 4 && < 6,
distributive >= 0.2.1 && < 1,
semigroupoids >= 4 && < 7
if impl(ghc < 8.0)
build-depends:
semigroups >= 0.8.3.1 && < 1
default-extensions: CPP
if impl(ghc)
cpp-options: -DLANGUAGE_DeriveDataTypeable
default-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
if impl(ghc >= 7.10)
ghc-options: -fno-warn-trustworthy-safe
default-language: Haskell2010