Size: a a a

2021 January 06

LL

Lama Lover in pro.elixir
Alexis IV Mobius
надо отвечать им, что тру пацаны прогают на хаскеле
На nasm
источник

AI

Alexis IV Mobius in pro.elixir
Lama Lover
На nasm
это надо сообщать любителям си
источник

БЁ

Борщевик Ёбаный... in pro.elixir
Lama Lover
У скалистов есть отличная традиция (почти как у кложуристов) заходить в чаты языков программирования и объяснять там что их язык говно
если разный уровень аргументации
источник

AI

Alexis IV Mobius in pro.elixir
Борщевик Ёбаный
если разный уровень аргументации
так чо там, где кусок кода
источник

БЁ

Борщевик Ёбаный... in pro.elixir
нот соу фаст
источник

AI

Alexis IV Mobius in pro.elixir
мне любопытно
источник

AI

Alexis IV Mobius in pro.elixir
вы нда там что ли пытаетесь не нарушить?
источник

БЁ

Борщевик Ёбаный... in pro.elixir
я пытаюсь накидать так, чтобы ничего не упустить
источник

БЁ

Борщевик Ёбаный... in pro.elixir
ну и да, на других неймингах что ли, но там всё просто
источник

AI

Alexis IV Mobius in pro.elixir
Борщевик Ёбаный
я пытаюсь накидать так, чтобы ничего не упустить
кря
щас найдёте minimal counterexample и сами поймёте, что не так :)
источник

БЁ

Борщевик Ёбаный... in pro.elixir
на новом mix new не получилось воспроизвести пример без ничего, диалайзер зелёный
но суть такая
источник

БЁ

Борщевик Ёбаный... in pro.elixir
есть набор модулей, логика которых совсем общая за исключением sql запроса

например так

defmodule PersonLoader do
   use GenericLoader

   def query ///// sql query
 end


В общем модуле некоторый процессинг и в итоге вызывается DatabaseContext.update /// который по контракту возвращает супер простые {:ok, record()} | {:error, changeset()}.
Где changeset по-хорошему opaque, но оно ни в каком виде не работает
И DatabaseContext.update точно соответствует контракту, оно не рейзит эксепшены и учитывает все кейсы

но попытка в любом виде сделать
case
 DatabaseContext.update(blabla) do
 {:error, _} ->
 или {:error, %{errors: _}}
 и всегда с {:ok, _}
end
воз
вращает
{:ok, _
}

can never match the type

 {:error,
  %Ecto.Changeset{………
но я о
бработал этот кейс выше, {:error, _} точно его покрывает

И эту ошибку диалайзер бросает именно в месте подключения макроса, то есть в use GenericLoader на второй строке
источник

БЁ

Борщевик Ёбаный... in pro.elixir
и нет, это не новый путь, и в других местах, где написано также, диалайзер пропускает
плюс подключений макроса 8 штук, ошибку он бросает только в двух
хотя модули отличаются между собой только sql запросом, а не функцией процессинга
источник

БЁ

Борщевик Ёбаный... in pro.elixir
и что-то я либо нагрелся, либо не знаю, как это дебажить
источник

БЁ

Борщевик Ёбаный... in pro.elixir
пздц починил
источник

БЁ

Борщевик Ёбаный... in pro.elixir
и я продолжу утверждать, что я не дебил, хотя понимаю причину, почему диалайзер показал ошибку
и показал он не ту ошибку

та функция, которая по контракту не рейзит действительно не рейзит, но есть нюанс
она дёргает функцию, у которой под капотом

case Enum.each(list, never_raising_function) do
 :ok -> :ok
 _ -> raise «error»
end


у Enum.each по контракту нет ничего, кроме :ok, и то, что мой коллега написал такой кейс— это пиздец
но
1) эта ветка реально никогда не выполнится
2) ошибка, с которой упал диалайзер неверная. в случае рейза вызывающая функция тоже упадёт следовательно там no_return()
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Борщевик Ёбаный
и я продолжу утверждать, что я не дебил, хотя понимаю причину, почему диалайзер показал ошибку
и показал он не ту ошибку

та функция, которая по контракту не рейзит действительно не рейзит, но есть нюанс
она дёргает функцию, у которой под капотом

case Enum.each(list, never_raising_function) do
 :ok -> :ok
 _ -> raise «error»
end


у Enum.each по контракту нет ничего, кроме :ok, и то, что мой коллега написал такой кейс— это пиздец
но
1) эта ветка реально никогда не выполнится
2) ошибка, с которой упал диалайзер неверная. в случае рейза вызывающая функция тоже упадёт следовательно там no_return()
Дивлайзер тебе сказал, что {:error, _} никогда не будет. Где он соврал то?
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Can never match the type обозначает, что ты сделал ветку в которую никогда не попадёшь, а ты пишешь «я точно его покрываю»
источник

A ß in pro.elixir
записывайтесь в церковь святого диалайзера, короче
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Конечно покрываешь, в этом то и проблема, о которой тебе говорит диалайзер )))
источник