Fri May 24 20:50:29 EDT 2013

Now, what is the point?

f :: (s,a)->(s,b)
g :: (s',b)->(s',c)

f . g :: ((s,s'),a) -> ((s,s'),c)

1. Does it make sense to have those things as objects in Haskell
2. Is it really necessary to have them at the C level even?

I mean, it is nice and clean to have a siso system in the end, but
what is the point really?  Is it just to expose all the variables more
clearly?  If AI is necessary, the fact that the original language is a
stream language should be enough.

The things is that the primitives are not stateful.  It's groups of
primitives, and in order to do this in an OO approach, that grouping
needs to be abstracted.  Because of nesting, this can maybe get a bit
ugly so the explicit threading approach actually seems simpler.