On Jun 20, 2010, at 6:24 PM, Alexander Solla wrote:

do a <- getChar
   let b = c >>= return . f
  let c = b >>= return . g
  c >>= putChar
   b
________________

Correction:  by your construction, f and g are already in the Kliesli category, so you don't need the return compositions.  I still don't know if the construction is admissible though.