@proelixir

Страница 740 из 1045
Alexey
27.09.2017
11:19:54
нефига

Dmitry
27.09.2017
11:20:13
94

Andrey
27.09.2017
11:20:35
не подсказывай

Sergey
27.09.2017
11:21:41
не, серьезно, что за издевательство над людьми?

Google
Sergey
27.09.2017
11:22:01


я по другому это назвать не могу

Alexey
27.09.2017
11:22:15
вот поэтому, я и не тестирую с боевого акка )

Andrey
27.09.2017
11:22:24
Серега должен страдать

Sergey
27.09.2017
11:22:40
Серега должен страдать
а вот это обидно было :(

Dmitry
27.09.2017
11:22:58
107

Alexey
27.09.2017
11:23:14
а почему он его несколько раз спрашивает? ты его разбаниваешь чтоли?

Dmitry
27.09.2017
11:23:22
ну конечно

так я тебя тоже разбанил

Alexey
27.09.2017
11:23:30
а меня не разбанил

а. спасибки

Dmitry
27.09.2017
11:24:42


Я короче вместо того чтобы добавить сообщение при кике

Google
Dmitry
27.09.2017
11:26:26
Удалю сообщение на присоединение

вот такое

И если кого-то кикнули - то как не бывало

Andrey
27.09.2017
11:26:58
+1

Alexey
27.09.2017
11:27:28
ну. только в трее останутся циферки, что есть новые сообщения. зайдешь, а их нету

Dmitry
27.09.2017
11:28:18
Да, в нотификациях

Можно будет добавить /stat@BucklerBot

Когда нибудь

Sergey
27.09.2017
11:29:41
еее

В телеграммовском клиента под линупсы баг, судя по всему. Если тебя забанили, а после разбанили, и ты пытаешься вернуться группу, то увы, ты не увидешь сообщения, адресованные тебе.

В итоге, я заходил в группу и не видел сообщений от бота. Пытался что-то написать, а он меня - хопача- и банил.

move it away and try again

Константин
27.09.2017
11:44:23
у нас и так админов достаточно, елси появляются активисты - я сразу предлагаю админство

но с ботом полностью отпадает необходимость иметь админов)))

Красота))

Dmitry
27.09.2017
12:06:01
tldr: Рационально ли использовать raise для выхода из пайплайна? Задача такая: есть функция, где один из аргументов - список, и нужно убедится что этот список содержит элементы одного типа (integer к примеру). А после валидации там длинный пайплайн. Т.е. validate_list(list) |> do_stuff() |> do_another_stuff() ... и т.д. И естественно желание такое, что если валидация фейлится у нас функция должна сразу возвращать еррор. Ну и первое что мне пришло в голову это делать raise ArgumentError. Норма ли это или есть решения лучше? Гварды не воспринимают Enum.all, а макрос писать - оверкилл. Сомнения по поводу рейза от того что в интернетах пишут, мол его редко используют, валит процессы и все такое.

может у меня вообще вкорне неверный подход к валидации аргументов, так что буду рад если поясните. А то у меня желание сделать так от привычки использовать промис чейн из js)

Dmitry
27.09.2017
12:07:37
Может тогда with использовать?

Nikolay
27.09.2017
12:08:21
+1

Dmitry
27.09.2017
12:08:25
with {:ok, validated} <- validate_list(list), .... else {:error, {:wrong_parameters, _}} -> ... end

Google
Dmitry
27.09.2017
12:08:33
Что-то в таком духе

Dmitry
27.09.2017
12:08:40
думал, но как это подвязать на то что у меня список вылидный если он содержит либо строки либо интеджеры, и логика в одной из функций разная

в зависимости от стринг/инт

Nikolay
27.09.2017
12:08:59
либо делай так, что бы твоя следующая фукнция в пайпе принимала турпл {:ok, value} {:error, []}

Dmitry
27.09.2017
12:09:07
т.е. мне из функции валидации надо еще возвращать тип

Dmitry
27.09.2017
12:09:31
Можешь в валидации приводить к одному типу

Nikolay
27.09.2017
12:09:31
ну и матчся на эти :ok, :error

Dmitry
27.09.2017
12:09:32
{:ok, type, validated} <- validate_list(list)

Dmitry
27.09.2017
12:09:43
Как делает changeset.cast

Он и валидирует и приводит

Dmitry
27.09.2017
12:10:10
{:ok, type, validated} <- validate_list(list)
вот это подходит, спасибо)

Dmitry
27.09.2017
12:10:40
Ну это же монада стандартная

Dmitry
27.09.2017
12:10:51
Тогда вопрос следующий - когда вообще raise используется? И зачем в эликсире есть к примеру ArgumentError?

Dmitry
27.09.2017
12:10:57
Каждая функция в пайпе принимает либо данные либо ошибку

И ошибку пробрасывает дальше

А данные преобразовывает

Dmitry
27.09.2017
12:12:03
Ну это же монада стандартная
блин, вот это сильно. Не знал что changeset - часть эликсира. Надо попробовать. Я когда работал с экто мне понравилась идея ченджсета

Dmitry
27.09.2017
12:12:22
Changeset это не часть эликсира

Я про другое

Google
Dmitry
27.09.2017
12:12:53
Обычная option монада

Dmitry
27.09.2017
12:13:08
а

Dmitry
27.09.2017
12:13:34
https://fsharpforfunandprofit.com/rop/

Почему сделали with вместо такой милой штучки дрючки для меня навсегда останется загадкой

Хотя with по своей сути то же самое

Alexey
27.09.2017
12:20:26
на самом деле подходов два. пользуй любой. либо в rail паттерн заворачивай. либо ошибки лови

в первом случае, все ф-ии в цепочке должны принимать либо {:ok, data} либо {:error, reason}. ошибку пробрасывать дальше, а если ОК, то вычислять и результат отдавать дальше

во втором случае, идут чистые данные, без кортежа, но throw если что-то не так

Dmitry
27.09.2017
12:22:33
Просто в стандартную либу если бы накидали столько методов сколько в расте

Там и option

Там и result

Там и unwrap

И всевозможные if_some, then_result

А ещё какой нибудь модифицированный Enum

Чтобы вида {:ok, listA} мапил на {:ok, listB}

Было бы вообще супер пупер

Dmitry
27.09.2017
12:34:04
спасибо за ответы, попробую railway

Nikolay
27.09.2017
12:41:45
Было бы вообще супер пупер
я объясняю себе это просто - этого всего нет в Erlang…

Dmitry
27.09.2017
12:42:40
http://www.zohaib.me/monads-in-elixir-2

Den
27.09.2017
14:08:36
супер, почитаю про монадки)

Google
Dmitry
27.09.2017
14:09:16
супер, почитаю про монадки)
This post is not about what monads are, I expect that you already know about them. The post is to see how you can use monads in Elixir using already created libraries.

для новичков в теме была очень крутая статья про fantasyland spec, хоть и с уклоном на js

есть даже перевод на русский

Dmitry
27.09.2017
14:10:29
http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html

лучшея статья

с картинками

Страница 740 из 1045