Sun Dec 4 12:20:19 EST 2011

Problem: first argument of _let monadic?

I'm not sure..  Currently we need

  v <- ...
  _let v (\v -> ...)

But this looks weird.  _let should really take a monadic value.  The
alternative would be to not use _let but an explicit
variable-introduction interface:

  v <- nameVar $ ...

Let's fix that first.

The thing is that apparently all results are already named, so this
approach isn't necessary.  Really, _let isn't necessary if all
operations return named expressions.

What is necessary is a way to explicitly store non-monadic values
(i.e. literals or other variable references) in freshly named
variables.  So let's introduce _var.

It turns out that _begin also isn't necessary.  Maybe mVar can be
modified such that a variable of type () is never created?