abstracting away monad type via preprocessing:

ugly but keeps code DRY
unified interface for effect monads and unified effect implementations
fix tests