A better error monad transformer