Mon Aug 29 15:08:19 EDT 2016

Streams vs. coordinates (transposes)

Transposes are easy to express as operations on coordinates.
Compositions of transposes then become compositions of functions.

I wonder if it is possible to do the same kind of transformation on a
stream of data?

E.g. by caching the "block" coordinate.

The trick:
   1.  Compute output stream as a stream of highlevel coordinates.
   2.  Convert these coordinates to physical coordinates
   3.  Memoize the reads
   4.  For monotonous input, output is monotonous and it can be implemented using a one-way reader.

Clever, but nothing new -- links in to Feldspar's basic idea.

This needs to sink in for a bit.  Properties used to advantage:

  - monotinicity in -> monotonicity out (means random access is not
    needed, streaming + caching works)

  - composition of coordinate-processing functions is *much* simpler
    and easier to express easier than composition of functions
    containing loops that move bytes around.