Mon Aug 17 17:06:18 EDT 2015

What does it mean?

class Monad m => Feedback m s where
  feedback :: s -> (s -> m (s, t)) -> m t

This isomorphic to

  Sig m t -> m t

So what it says is that the compilation monad can turn a signal into a
monadic value.

This makes absolutely no sense, except that it "shifts the universe",
meaning the base types are no longer scalars, but signals.

What happens when this gets applied multiple times?  Also doesn't make

Nonsense.  It needs to be tagged somehow.

If it is tagged as (m l t) then some things are needed to manipulate l.

Go for another blind run...

Failed again..

Whatever I try to change, there is always something that messes things
up in a way I that seems impossible to solve..

Some more questions:

- why is feedback meaningful for Code, but not for Eval?
- why is unfold meaningful for Eval but not for Code?

Maybe the trick is that Code's implicit time-dependence seeps through?
The feedback equation really is about s and t being streams..

So let's try to write a semantics for that in Eval.