Wed Apr 28 13:41:31 EDT 2010

Dataflow notation: input and output?

The idea is that you don't want to duplicate array references inside
loops, so maybe it's better to use a load/store mechanism built into
the Function -> C printer. 

data Let      = Let      String String [String]  deriving Show
data Function = Function [String] [Let] [String] 

Hmm.. another case of leaky abstractions..  What is necessary is a
well-defined translation from expression to dataflow form.

1. Given a (Haskell) function that maps a bunch of inputs (either
   curried or as a tuple) to a bunch of outputs.

2. Given an abstract description of I/O ports.

3. Construct a C program that binds the computation to the ports.

This is a "LIFT" operation.  Find a good representation that can guide
the rest of the implementation.