Mapping over Either's Left

either, haskell

Solution

We have such a function in the standard libraries,

Control.Arrow.left :: a b c -> a (Either b d) (Either c d)

is the generalisation to arbitrary Arrows. Substitute `(->)` for `a` and apply it infix, to get the specialisation

left :: (b -> c) -> Either b d -> Either c d

There is nothing wrong with your approach in principle, it's a sensible way to handle the situation.

Problem

Somewhere in my app I receive an `Either ParserError MyParseResult` from Parsec. Downstream this result gets some other parsing done over using other libs. During that second phase of parsing there also may occur some kind of error which I would like to pass as a `Left String`, but for that I need to convert the result from Parsec to `String` too. To achieve that I need a function which will allow me to map over a `Left` with a `show` function. The mapping function I'm thinking of looks something like this: ``` mapLeft :: (a -> b) -> Either a c -> Either b c mapLeft f (Left x) = Left $ f x mapLeft _ x = x ``` But I was quite surprised not to find anything matching on hackage db. So now I'm having doubts whether I'm using a correct approach to my problem. Why isn't there such a function in standard lib? What is wrong with my approach?

Original source