It would be nice to port the Lensed monad that I designed for snap, perhaps modified to actually take a Zipper rather than a Lens.
One down side of this would be additional dependencies. (e.g. MonadCatchIO-transformers) This drifts towards wontfix territory.
I've decided not to do this.
Working with @mightybyte, we updated Lensed in snap to use lens rather than data-lens.
The resulting version of Lensed, wound up requiring Control.Lens.Loupe to work properly, because otherwise you cannot return a lens as a monadic result, due to the lack of usable ImpredicativeTypes in GHC.
The resulting compromise is rather domain specific.