У меня есть следующий метод:
firstRightOrLefts :: [Either b a] -> Either [b] a
firstRightOrLefts eithers =
case partitionEithers eithers of
(_, (x : _)) -> Right x
(xs, _) -> Left xs
Меня беспокоит уродливое сопоставление шаблонов, и мне было интересно, есть ли более идиоматический способ написать этот метод. Идея в том, что у меня есть множество вычислений, которые могут вернуть Эйтерса, и я просто хочу получить первый результат или все сообщения об ошибках. Возможно, я использую неправильную структуру данных. Возможно, писательская монада лучше подходит для этой задачи. На данный момент я действительно не уверен. Приветствия за любую помощь!