Не уверен, как это назвать, вариант подойдет так же хорошо, как и Либо, мне все равно нужно обработать третий случай.
Scalaz, вероятно, уже предоставляет что-то подобное, но мне любопытно узнать, как без отдельной библиотеки можно кратко справиться со следующим простым случаем:
Мне нужно проверить, существует ли пользовательский сеанс, как фактический пользователь, так и администратор, входящие в систему как пользовательские сценарии, причем последний имеет приоритет над первым; если ни одно из условий не существует, показать экран входа в систему.
Фактическая проверка сеанса пользователя выглядит так:
request.session.get(Security.username) map { id=>
f(Success(id.toInt, request))
} getOrElse( onFail(request) ) // onFail = show login
и мне нужно добавить в админ, выдающий себя за пользователя:
request.session.get(Security.impersonate) map { id=>
f(Success(id.toInt, request))
} getOrElse( onFail(request) )
Я мог бы собрать все это вместе, но предпочел бы немного очистить, операция одинакова независимо от пользователя или администратора как пользователя.