(redirected to haskell-cafe) mfix is "value" recursion, not "effect" recursion. It allows you to "tie-the-knot" with data being constructed recursively even in a monadic context.
When you are using the Writer monad like this, the bind operation between statements in a "do" construct is just ++. "simulation" in your message is > simulation:: Writer [String] () > simulation = mdo > a <- server cr > cr <- client $ take 10 a > return () This is really just the following: > simulation :: Writer [String] () > simulation = Writer result where > ( a, a_out ) = runWriter (server cr) > ( cr, cr_out ) = runWriter (client $ take 10 a) > result = ( (), a_out ++ cr_out ) With "mdo" you are allowed to have the values refer to each other; the right hand side of "( a, a_out ) = ..." can refer to "cr" and vice versa. But there's no way to follow the thread of computation between the server and the client with this style. -- ryan _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe