
On Nov 18, 2008, at 6:53 PM, Brandon S. Allbery KF8NH wrote:
On 2008 Nov 18, at 21:23, Warren Harris wrote:
However, each of the clauses is actually an output routine to send the expression that it denotes to a remote server, and a parser for receiving the results. Since a clause is really a pair of operations, it doesn't seem possible to formulate a monad that will compose all the output routines together and compose all the input routines together in one shot. (Note that the variables in the above code (v1, v2) represent inputs to be received from the remote server -- all outputs are packaged into the clause expressions themselves and are effectively literals.)
Have you considered using arrows instead?
I'm not that familiar with arrows, but have just looked at some papers by Hughes and Paterson. It appears that unlike monads, the right-hand side of the arrow operator is not a function, and as such could be used to define a pairwise stream sequencing operator for my particular case. Are there any specific references that show something like this, e.g. for implementing network protocols? (I'm still trying to get my head around the basics of arrows.) Thanks, Warren