Aleksei (astynax)
Впрочем, аппликативов со значимым порядком навалом...
Leonid 🦇
от конкретного экземпляра аппликативного зависить можно же
Aleksei (astynax)
Но не требуется
Aleksei (astynax)
Для гарантированного порядка - монадки
Leonid 🦇
экземпляр может гарантировать всё что хочет
Aleksei (astynax)
Эт да
kosc
Надо же, я вас уже почти понимаю.
kosc
А ещё оказалось, что за пять глав из семи в книге Душкина я ни разу не встретил оператор <*>. ровно как и <$>.
Aleksei (astynax)
Душкин - тот ещё ретроград :)
kosc
Это типо новомодные хипстооператоры и без них можно обойтись?
Aleksei (astynax)
Нет, конечно. Это самые нужные, можно сказать
Aleksei (astynax)
У нас в рабочих проектах половина кода - аппликативная
kosc
Оу, у вас на работе Haskell?
kosc
А можно узнать в кратце, что за компания, чем занимаетесь?
kosc
Вакухи, требования?
Aleksei (astynax)
http://typeable.io
Alexander
тут есть hexresearch, tweag, serokell (2 л)
kosc
Спс за линк
Alexander
последние готовы брать юниоров вроде
Alexander
не знаю ничего про условия
Alexander
пилят cardano
kosc
Не, в юниоров не пойду, я уже петономидл.
Aleksei (astynax)
Вакухи, требования?
Иногда хантим. Требования - "лишь бы адекватный был". Монадки уметь, конечно, надо, увы
kosc
Так что либо задрочусь до мидлохаскеля, либо останусь петонщегом ещё на какое-то время.
Egor
петонщек скучноват, лучше хаскель
Anonymous
Реализовывать свои или просто юзать те, что есть?
второе подразумевает первое, нет?
Aleksei (astynax)
Пока учишь, всяко пару своих пишешь - хоть те же парсер-комбинаторы
kosc
Почему 12? Я слышал про стандарты 1998-го и 2010-го годов.
kosc
Что-то между ними пропустил?
Aleksei (astynax)
Аппликативы есть лет 12 уже. И они не относятся к стандартам языка - Аппликативы, это stdlib
A64m
да это не важно
Anonymous
функторы с 1942 года еще
Dmitry
hxr.team пилим заказную разработку, скоро опять будут вакансии
Aliester
функторы с 1942 года еще
товарищ Сталин ввел при защите Москвы?
Anonymous
samuel eilenberg
A64m
не в хаскеле же
Anonymous
а это важно?
Aleksei (astynax)
в изначальном контексте - важно. Ибо речь именно о хаскеле была, как бы
kosc
Два лямбда-терма этому хаскеллисту!
Egor
не надо так шутить, спасибо
kosc
Почему?
Egor
ну как бы, уже шутили так, и не раз, поэтому не смешно
kosc
Про комбинаторы тоже уже шутили?
Leonid 🦇
@astynax @catamorphism https://hackage.haskell.org/package/validationt-0.2.0.0 а как этим пользоваться?
Konstantin
@egoarka а как можно шутить?
Aleksei (astynax)
@astynax @catamorphism https://hackage.haskell.org/package/validationt-0.2.0.0 а как этим пользоваться?
Пишешь аппликативно, ошибки накапливаются. Ошибки бывают "некритичные" (ворнинги) - тогда они будут в "логе", но и результат получишь
Leonid 🦇
это понятно, но как пользоваться то?
Egor
@etehtsea https://wiki.haskell.org/Humor
Denis
@lonokhov агрегирует ворнинги или завершает валидацию на error, сейчас пример покажу
Leonid 🦇
Типов достаточно для документации?
Aleksei (astynax)
это понятно, но как пользоваться то?
runAvlidationT $ User <$> validateName <*> validateAge
Aleksei (astynax)
Типов достаточно для документации?
потому и Straightforward validation monad. :)
Leonid 🦇
это же как https://hackage.haskell.org/package/these, только со стейтом?
Leonid 🦇
/me вообще у себя на AccValidation / EitherT наговнякал всякое
Aleksei (astynax)
У нас ещё ворнинги есть, т.е. можно получить результат валидации вместе со списком предупреждений
Leonid 🦇
@astynax а что за MonoidMap?
Leonid 🦇
ну так и ChronicleT может
Aleksei (astynax)
> Map with Monoid instance which mappend its values же :)
Leonid 🦇
но зачем?
Denis
MonoidMap это мап, который клеит ошибки для одного поля
Denis
представь что валидируешь веб-форму
Denis
для одного поля, может быть несколько проверок, которые на фронт надо отдать
Denis
когда агрегируешь в MonoidMap, то они маппендятся
Leonid 🦇
вот я в итоге отказался от такого, ибо тогда имена в формочке просачиваются в бэкенд
Denis
т.е. один экшен проверяет поле foo одним валидатором, другой - поле foo другие валидатором, а потом они мерджатся в ValidationT монаде
Leonid 🦇
ну это понятно
Denis
а т.к. ValidationT это трансформер, то можно со своими любыми монадами запускать, в базу там ходить, это всё
Leonid 🦇
а у вас (<*>) == ap?
Aleksei (astynax)
Можно по идее параметризовать сам рекорд так, что сами поля будут содержать мету с результатами валидации. Но тут усложняется тип-результат
Denis
вот я в итоге отказался от такого, ибо тогда имена в формочке просачиваются в бэкенд
это очень удобно, когда ты валидируешь API по схеме, например, т.к. по именам из API и надо агрегировать всё и отдавать в клиент/фронт
Denis
у нас спецрекорды были много где, но потихоньку выпиливаются
Leonid 🦇
ну так у тебя приходит уже рекорд попарсенный, а из него опять именя жсоновые выдавать (ну или формочные)
Denis
https://github.com/typeable/schematic/blob/master/src/Data/Schematic/Validation.hs#L56 https://github.com/typeable/schematic/blob/master/src/Data/Schematic.hs#L78
Denis
у меня не приходит рекорд пропарсенный как раз!
Denis
я в хаскелле пишу схему и в хаскелле автоматом валидирую на соответствие её, а если все ок, то конвертирую в что-то более доменно-хаскельное
Leonid 🦇
Я в итогде сделал рекорд попарсенный, ибо валидация таких вещей как "а вот айдишник то есть?" удобнее делать отдельно от парсинга.
Leonid 🦇
ну т.е. ходить в бд
Leonid 🦇
ибо транзакции