Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Интересная статья! Спасибо за перевод.
После прочтения остался вопрос: тут вся валидация — это проверка того, что Maybe-поля обязательно присутствуют. Интересно было бы взглянуть на примеры, когда:
Maybe Person, а Either WhyInvalid Person с описанием того, почему проверка не понравилась.Примерно так обычно выглядит продуктовая валидация исходя из моего опыта — поэтому и интересно взглянуть на то, как Higher-Kinded Data помогает в этих случаях.
mPerson :: Perosn' Maybe
mPerson = Peson {
...
pAge = readMaybe ioAge >= (\age -> if age< 18 then Nothing else Just age),
...
}
mPerson :: Perosn' Maybe
mPerson =
let pAge = readMaybe ioAge >= (\age -> if age < 18 then Nothing else Just age) in
let pName = pAge >= (\age ->
if age > 34 && age < 42 then ...
else if age > 101 && age < 11 then ...
else ... ) in
Peson {
...
pName = pName,
pAge = pAge,
...
}
И мы будем валидировать данные лишь в том случае, когда валидны все поля записи.
-- Этот код будет работать и для Identity, так как Identity так же имеет экземпляр класса Applicative:
Person <$> name <*> age
Данные высокого рода