If you add a 'catch' function to `either`, I recommend using the implementation of 'catchT' in the 'errors' package that lets you change the type of the left value so that it is symmetric to (>>=).