Обработка ошибок для нескольких значений Both

У меня есть два значения either, например:

Either String Config  -- error string or config parsed
Either String Env     -- error string or environment variables detected

И я хотел бы извлечь их значения в эту запись:

type App = App { config :: Config, env :: Env }

при быстром сбое, если были ошибки (значение Left для одного из этих значений).

Я мог бы использовать два оператора case, но интересно, есть ли уже абстракция, которую я мог бы использовать здесь?

В идеале я бы зарегистрировал сообщение об ошибке и немедленно вышел из программы.


person Sridhar Ratnakumar    schedule 27.12.2017    source источник


Ответы (1)


Вы можете использовать тот факт, что Either String является Applicative для подобных вещей.

Предполагая

mcnf :: Either String Config
menv :: Either String Env

Ты можешь написать

mapp :: Either String App
mapp = App <$> mcnf <*> menv
person gallais    schedule 27.12.2017
comment
Спасибо. Также я использую System.Exit.die в either для обработки ошибок: github.com/srid/slownews/commit/< /а> - person Sridhar Ratnakumar; 27.12.2017