figured out continuation monad transformer.  phew.  kon trans doesn't really make sense underneath other monads--it should be on top.  it can propagate I/E only if both I/E are present.  the trick/insight is to allow for the type of the continuation return value to change when commuting kon with another effect, process the effect above the kon, and then swap it back down to restore the original shape.  MonadOpaqueKonI/E needed to be rewritten directly in terms of callCC/withC in order to preserve the opaqueness that I need for optimal object/meta cps conversion.  so now I have beautiful monad transformers that dotherightthing and my cps conversion uses it behind a very pretty abstraction.  happy david.