Sun Jan 27 12:55:04 CET 2013

Loops: combinators or straight recursion?

Straight recursion might be simplest, but this requires some support
in the type checker and evaluator.  Probably needs a Y-combinator to
break the typing loop.

So ordinary "hierarchical" combinators look more interesting.
However, this requires type annotation of function bodies.  Can this
be avoided by using "macro combinators" that are type checked only
when they are inlined?  I.e. not supporting higher order functions in
the language, just some recursive expansion guard.

Maybe this should look to true SSA.  How are loops handled in SSA?

From a higher perspective: this stuff is really important.  Not all
loops are going to be SISO loops.  Some are going to be proper folds
with explicit state init, i.e. SIS + S0.

Better make it work!

The good thing is that the current abstract for stream functions is
pretty good.  The trouble now is drivers.  How to put that in the

What does a driver do?
  - Feed back state I/O
  - Lift operations over arrays

That should probably stay like that.