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?