if the effect stack is M |: R and if U contains M
we transform each "Union[R, X]" in the Impure case into a Union for U
and we try to recurse on other effects present in R
if the effect stack is M |: NoEffect and if U contains M we
just "inject" the M[X] effect into Eff[U, A] using the Member typeclass
if M is not present when we decompose we throw an exception. This case
should never happen because if there is no other effect in the stack
there should be at least something producing a value of type A
Trait for polymorphic recursion into Eff[?, A]
The idea is to deal with one effect at the time: