packages feed

enumerator-0.4.7: enumerator.cabal

name: enumerator
version: 0.4.7
synopsis: Reliable, high-performance processing with left-fold enumerators
license: MIT
license-file: license.txt
author: John Millikin <jmillikin@gmail.com>
maintainer: jmillikin@gmail.com
copyright: Copyright (c) John Millikin 2010
build-type: Simple
cabal-version: >=1.6
category: Data, Enumerator
stability: experimental
homepage: http://john-millikin.com/software/enumerator/
bug-reports: mailto:jmillikin@gmail.com
tested-with: GHC==6.12.1

description:
  Typical buffer&#x2013;based incremental I/O is based around a single loop,
  which reads data from some source (such as a socket or file), transforms
  it, and generates one or more outputs (such as a line count, HTTP
  responses, or modified file). Although efficient and safe, these loops are
  all single&#x2013;purpose; it is difficult or impossible to compose
  buffer&#x2013;based processing loops.
  .
  Haskell&#x2019;s concept of &#x201C;lazy I/O&#x201D; allows pure code to
  operate on data from an external source. However, lazy I/O has several
  shortcomings. Most notably, resources such as memory and file handles can
  be retained for arbitrarily long periods of time, causing unpredictable
  performance and error conditions.
  .
  Enumerators are an efficient, predictable, and safe alternative to lazy
  I/O. Discovered by Oleg Kiselyov, they allow large datasets to be processed
  in near&#x2013;constant space by pure code. Although somewhat more complex
  to write, using enumerators instead of lazy I/O produces more correct
  programs.
  .
  This library contains an enumerator implementation for Haskell, designed to
  be both simple and efficient. Three core types are defined, along with
  numerous helper functions:
  .
  * /Iteratee/: Data sinks, analogous to left folds. Iteratees consume
  a sequence of /input/ values, and generate a single /output/ value.
  Many iteratees are designed to perform side effects (such as printing to
  @stdout@), so they can also be used as monad transformers.
  .
  * /Enumerator/: Data sources, which generate input sequences. Typical
  enumerators read from a file handle, socket, random number generator, or
  other external stream. To operate, enumerators are passed an iteratee, and
  provide that iteratee with input until either the iteratee has completed its
  computation, or EOF.
  .
  * /Enumeratee/: Data transformers, which operate as both enumerators and
  iteratees. Enumeratees read from an /outer/ enumerator, and provide the
  transformed data to an /inner/ iteratee.

extra-source-files:
  readme.txt
  --
  src/api-docs.anansi
  src/binary.anansi
  src/compat.anansi
  src/enumerator.anansi
  src/list.anansi
  src/primitives.anansi
  src/text.anansi
  src/types.anansi
  src/util.anansi
  --
  examples/cat.hs
  examples/wc.hs
  --
  scripts/cabal-dist
  scripts/run-tests
  --
  tests/enumerator-tests.cabal
  tests/Properties.hs

source-repository head
  type: bazaar
  location: http://john-millikin.com/software/enumerator/

library
  ghc-options: -Wall -O2
  hs-source-dirs: hs

  build-depends:
      transformers >= 0.2 && < 0.3
    , bytestring >= 0.9 && < 0.10
    , text >= 0.7 && < 0.12

  if impl(ghc >= 6.10)
    build-depends:
        base >= 4 && < 5
  else
    build-depends:
        base >= 3 && < 4
      , extensible-exceptions >= 0.1 && < 0.2

  exposed-modules:
    Data.Enumerator
    Data.Enumerator.Binary
    Data.Enumerator.Text
    Data.Enumerator.List
    Data.Enumerator.IO

  other-modules:
    Data.Enumerator.Util