There exists an Either-like Applicative (usually called "Validation") that either collects all the errors, or returns a success. This is different from the Monad instance of Either, that stops at the first error encountered.
The type can be found at the validation package. However, that package incurs on a heavy lens dependency.
Recently, the type has cropped up without the lens dependency in both transformers (as the Errors type synonym) and either (as Validation).
The version in the either package has a more precise type, as it only requires the error values to form a Semigroup, but not necessarily a Monoid. So you can use a NonEmpty to accumulate errors.