I don’t think it has a standard name, but I use that kind of structure in the compiler for canonicalization.
For canonicalization, I want to show errors for all names that have typos, so the errors are all collected. Perhaps interestingly, I believe my version of this structure does not follow “the laws” in that liftA2 can collect more errors than liftM2 if there’s an error in the first argument. (I.e. implementing things with andThen makes it impossible to collect errors from the callback.) In this particular case, I think it’s sensible to get as many errors as possible though!
Anyway, point is, I think there’s no standard name. I just have my own definition of a Result type in the compiler.
P.S. The structure I use for collecting errors is a non-empty “bag” with O(1) appends, that way each map2 is always O(1) and then I flatten the bag at the end in O(n). type Errors x = One x | More (Errors x) (Errors x)