           SPELL=haskell-enumerator
         VERSION=0.4.20
          SOURCE="enumerator-${VERSION}.tar.gz"
   SOURCE_URL[0]=https://hackage.haskell.org/package/enumerator-${VERSION}/${SOURCE}
     SOURCE_HASH=sha512:90711142b61cee2184420f4d5c9de9563afe6198cccbf5d9d8a75253b307c3df9fee388dc7770e8151f8d7b5570afdb30d8e4e597ce462302dda8430e64050ad
SOURCE_DIRECTORY="${BUILD_DIRECTORY}/enumerator-${VERSION}"
        WEB_SITE="https://john-millikin.com/software/enumerator/"
      LICENSE[0]=MIT
         ENTERED=20150804
           SHORT="reliable, high-performance processing with left-fold enumerators"
cat << EOF
Typical buffer–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–purpose; it is difficult or impossible to compose buffer–based
processing loops.

Haskell’s concept of “lazy I/O” 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–constant space by pure code. Although somewhat more complex to write,
using enumerators instead of lazy I/O produces more correct programs.
EOF
