packages feed

streams-3.3: streams.cabal

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 <ekmett@gmail.com>
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