
Anatolii
18.09.2016
16:25:29
ну мне же надо чтобы если ошибка в однйо их них вылетит

Evgenij
18.09.2016
16:25:31
Я так понимаю это валидация?

Anatolii
18.09.2016
16:25:36
да
в моем случае

Google

Anatolii
18.09.2016
16:25:46
вылетает первая ошибка
я не собираю результаты разных валидаци

Evgenij
18.09.2016
16:26:22
Тебе надо чтобы ошибки накапливались то думаю райтер

Anatolii
18.09.2016
16:26:45
я не хочу накапливать
я хочу выбросить первую которая попалась
я в начале вот так записал
checkUser :: User -> Either TodoErr ()
checkUser u = checkPassword u >> checkLogin u
но это как-то не очень:)

Evgenij
18.09.2016
16:29:18
А мне кажется ок причём тут явно видно монады?но это имхо
Мне например лично нравится пропускать через цепочку что-то ?
А на выходе забирать результат
Но ты же знаешь что я не супер эксперт?

Anatolii
18.09.2016
16:31:18
ну я такой же эксперт как и ты:?)
* :)

Google

Anatolii
18.09.2016
16:31:34
просто если этих проверок будет увеличиваться
то как-то приятнее их в список засунунть

Evgenij
18.09.2016
16:31:53
Ну реально не >> а >>= вот соль то
Ну я думаю просто дрбавить >>= и твою монады и все

Anatolii
18.09.2016
16:33:20
это мне надо тогда чтобы все функции проверок возвращали User
Either MyErr User
а у меня сейчас Either MyErr ()
смысла то возвращать User нету
я не изменяю его состояние

Anton
18.09.2016
16:36:10
почему бы не накапливать, а потом выбросить первую?
Тебе надо чтобы ошибки накапливались то думаю райтер
я не хочу накапливать

Evgenij
18.09.2016
16:36:13
Да согласен но операция прерывается есть же guard посмотри как работают

Aleksey
18.09.2016
16:36:57

Evgenij
18.09.2016
16:37:12
Те вычисления прекращаются
если что-то не то

Anton
18.09.2016
16:38:30
тогда уж check funcs user = head $ lefts $ map ($ user) funcs

Anatolii
18.09.2016
16:38:54
вот это уже страшные oneliners пошли:)

Aleksey
18.09.2016
16:39:44
https://hackage.haskell.org/package/applicative-fail-1.1.1/docs/Control-Monad-Fail.html
есть ещё пакет для валидации такой

Evgenij
18.09.2016
16:39:54
вот это уже страшные oneliners пошли:)
А так да в листах как-то динамично будет ,писать почти ненадо, при изменениях и добавлениях в правила валидации , добавил в лист правило или удалил и все?

Aleksey
18.09.2016
16:40:11
либо ExceptT + StateT

Google

Anatolii
18.09.2016
16:41:24
можно ExceptT + ReaderT
стэйт тут не нужен

Evgenij
18.09.2016
16:48:55

Anatolii
18.09.2016
16:49:17
мне кажется что такой тип может сбить с толку
в моем случае явно видно что User не меняется

Evgenij
18.09.2016
16:49:35
Почему или эрр или юзер?

Anatolii
18.09.2016
16:49:41
ну и что функция вообще ничего не делает
кроме того как проверяет
а когда она возвращает Юзера
уже вопросы могу возникнуть

Anton
18.09.2016
16:49:58
зачем тогда Either, если можно Maybe

Anatolii
18.09.2016
16:50:04
ну и что оно даст?
ну Left у Either - это как раз ошибка

Evgenij
18.09.2016
16:50:29
Ну мэйби это типа как я понимаю или есть или нет
А почему нет хз

Anatolii
18.09.2016
16:50:40
а Just у Maybe - это наоборт нормально обычно:)

Evgenij
18.09.2016
16:51:04
А эйзер если нет то можно подробности выдать почему?

Anatolii
18.09.2016
16:51:39
их чтнеия книг я понял что для ошибок именное Left у Either используют

Evgenij
18.09.2016
16:52:08
Ну я знаю но туду же в лефт запихать хоть что можео
Что душе угодно

Google

Evgenij
18.09.2016
16:53:07
Свои ерроры или функции или типы итп
Я читал про 8 способов обработки ошибки - был в шоке , сейчас думаю ошибокив хаскель нету понятия это тоже результат?имхо

Anatolii
18.09.2016
16:54:32
ну как же нету
вон в EitherT есть функция
throwError
ну и монада Either как по мне явно показывает
что это огибки
которые в Go обрабатывают каждый раз if err != nil

Evgenij
18.09.2016
16:55:23
Моё может ошибочное мнение это чтобы понятно было для клиента либ?
Я скажу коротко - отсутствие результата тоже результат

Anatolii
18.09.2016
16:56:17
ну в хаскеле ж есть как раз () для отсутствия результата:)

Evgenij
18.09.2016
16:56:46
Ну это если тебе не требуется действия на этот результат

Anatolii
18.09.2016
16:57:07
ну да

Evgenij
18.09.2016
16:58:11
Я думаю ты согласиться что действия это результат ответа на входной параметр
Вот в Эрланге мне нравится - если это не в нашем понятии умираем и возраждаемся как будто этого не было ( фолт толерант)
Толя добавлю вот например ты думаешь юзер менее метра с кепкой это не наш человек мы его игнорирует(еррор) а выше ок! И вот эйзер в левт кидает юзеров менее метра с кепкой а право более
Те ошибка это тоже результат только не в нашем уютном мире?
Те просто вычисления идут в другом рукаве
Это чисто имхо
И юзеров в лефт мы можем в логи писать или просто в /dev/null

Google

Anatolii
18.09.2016
17:26:34
я бы сделал кортеж из двух списков
но твои вариант тоже имеет право на жизнь :)
ну у эрланга там своя система целая:)

Evgenij
18.09.2016
17:33:45
Да я согласен с эрлангом что нельзя все предвидеть - то что не в нашем множестве отвергаем и непаримся?
А валидация как думаешь сделать?

Anatolii
18.09.2016
17:34:41
в хаскеле?
со сбором ошибок?
так там mapM какой-то подойдет наверное

Evgenij
18.09.2016
17:36:38
Ну например эти те ошибка или ошибки до чего - какие действия нужны(например информирует кого-то на юи или ещё что-то)

Anatolii
18.09.2016
17:38:13
sequence [checkPassword, checkLogin] u
вот в моем случае
я получу на выходе массив ошибок и нормальных рузультатов
ну и фильтр добавить
который все Right фильтранет

Evgenij
18.09.2016
17:39:30
Массив ошибок чтобы показать юзеру?

Anatolii
18.09.2016
17:39:50
ну можно так
или как ты хотел?

Evgenij
18.09.2016
17:40:21
Ну а райтер почему не юзать?

Anatolii
18.09.2016
17:40:34
да, согласен
можно Writer