The definition of maybe-compose is still somewhat confusing.
'mproc' is a procedure a* -> Container b* where I note "zero or more values' as a* and b*,
and Container is either Maybe or Either.
The first line says maybe-compose returns an mproc.
The second line says the returned procedure takes a single value 'Container a*'.
It is true that 'Container a*' is a single value, so it still falls into the definition of mproc. But with the monadic operation, what we expect is
compose :: (a* -> Container b*) -> (b* -> Container c*) -> (a* -> Container b*)
However, the current definition says
compose :: (a* -> Container a*) -> (b* -> Container c*) -> (Container a* -> Container c*)
If *-compose is indeed a composition of mprocs, I expect the following relations and I feel it's more natural:
(maybe-compose x y z) == (maybe-compose x (maybe-compose y z))
== (maybe-compose (maybe-compose x y) z)
(maybe-bind m x y) == (maybe-bind m (maybe-compose x y))
Now, you may indeed intend the current behavior. If that's the case, at least the first line of the definition should avoid saying "returns an mproc", I think. But I wonder if that's the current intention, do we need *-compose?