@haskellru

Страница 115 из 1551
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
[User -> Either MyErr ()] -> User -> Either MyErr ()
check funcs user = lefts $ map funcs ($ user)

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
а у меня сейчас Either MyErr ()
Кстати а почему так может лучше Either MyErr User?

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

Страница 115 из 1551