Size: a a a

2020 May 25

AR

Andrew Rudenko in pro.elixir
Pig Greenest
Stream.unfold({0, 1}, fn {curr, next} -> {curr, {next, next + curr}} end)
ну и потом носишься с этим аккуратно думая что ты уже вычислил, а что еще нет и кешируешь ручками
источник

AR

Andrew Rudenko in pro.elixir
или перевычисляешь каждый раз
источник

AR

Andrew Rudenko in pro.elixir
не говоря уже про декларативную силу рекурсивных определений )
источник

AB

Alex Bubnov in pro.elixir
Andrew Rudenko
не говоря уже про декларативную силу рекурсивных определений )
вот насчет этого я бы поспорил, к ним нужно привыкать
источник

AB

Alex Bubnov in pro.elixir
имхо, unfold сильно читабельнее для неподготовленного человека
источник

PG

Pig Greenest in pro.elixir
1) да, потому что стримы сделаны для галочки, у нас тут не call by need
2) какая сила если у нас даже head/tail от стрима не возьмешь?
источник

LL

Lama Lover in pro.elixir
Andrew Rudenko
не говоря уже про декларативную силу рекурсивных определений )
Ну, elixir/erlang достаточно императивные в мире функциональных языков
источник

PG

Pig Greenest in pro.elixir
стримы делают свою работу, но во многих случаях, когда хочется пофлексить ленивостью, списки будут быстрее
источник

LL

Lama Lover in pro.elixir
Andrew Rudenko
ну и потом носишься с этим аккуратно думая что ты уже вычислил, а что еще нет и кешируешь ручками
Поэтому стримами редко пользуются, есть классные concurrency паттерны, которые удобно и идиоматично заменяют большие и сложные стримы
источник

AR

Andrew Rudenko in pro.elixir
Alex Bubnov
имхо, unfold сильно читабельнее для неподготовленного человека
НА САМОМ ДЕЛЕ, под "неподготовленным" в данном контексте считается человек, который 10 лет писал на сишках / js-ах, и ему вот такие нотации непривычны. кмк, еще большой вопрос, что является более _понятным_ для человека — мышление в рамках одной операции или более глобальными сущностями
источник

AR

Andrew Rudenko in pro.elixir
Pig Greenest
1) да, потому что стримы сделаны для галочки, у нас тут не call by need
2) какая сила если у нас даже head/tail от стрима не возьмешь?
ну воображаемая сила. не, в рамках того, что есть все круто, просто было бы круто унифицировать Stream и условные enum операции на списках, я к этому привык в кложе, но мне вот объяснили в чате, что на beam это не сделать нормально
источник

LL

Lama Lover in pro.elixir
На beam вообще с любой мемоизацией всё очень плохо. Единственные нестрашные мемоизации которые я знаю - это через process dictionary в рамках одного процесса или через Cachex в рамках системы
источник

PG

Pig Greenest in pro.elixir
хаскель в этом плане довольно специфичный язык, во всех строгих/тотальных языках стримы и списки это разные сущности
источник

AR

Andrew Rudenko in pro.elixir
Lama Lover
На beam вообще с любой мемоизацией всё очень плохо. Единственные нестрашные мемоизации которые я знаю - это через process dictionary в рамках одного процесса или через Cachex в рамках системы
о, process dictionary, не знал
источник

AR

Andrew Rudenko in pro.elixir
Pig Greenest
хаскель в этом плане довольно специфичный язык, во всех строгих/тотальных языках стримы и списки это разные сущности
ага, но КРАСИВО же )
источник

LL

Lama Lover in pro.elixir
Andrew Rudenko
ага, но КРАСИВО же )
Да и борщи тоже вкусные, буду хаскеллистом
источник

LL

Lama Lover in pro.elixir
Pig Greenest
1) да, потому что стримы сделаны для галочки, у нас тут не call by need
2) какая сила если у нас даже head/tail от стрима не возьмешь?
Так надо уже давно реализовать человеческие стримы на elixir-ах. А то даже со всеми лимитациями beam-а текущая реализация всё равно сосёт, я уверен можно и лучше
источник

АЮ

Андрей Юнми... in pro.elixir
V
Котаны, а кто использовал кастомные ecto-типы (Ecto.Type) в запросах?
Например
defmodule Player do
 schema "players" do
   field(:id, :integer)
   field(:gender, Gender)
 end
end

defmodule Gender do
 use Ecto.Type
 def cast(:male), do: 1
 def cast(:female), do: 2
 def load(1), do: :male
 def load(2), do: :female
end

query = from p in Player,
   where: p.gender = ???
   select: p
Что указать вместо ???? Варианты :male и 1 не работают. Доки читал, книжки скачивал, у гугла спрашивал, все молчат.
Попробуй where: p.gender == ^:male.
источник

V

V in pro.elixir
Андрей Юнми
Попробуй where: p.gender == ^:male.
Спасибо. Я уже нашёл способ
where fragment("?", p.gender) == type(^:male, p.gender)
но и твой вариант попробую.
источник

АЮ

Андрей Юнми... in pro.elixir
Вообще, если либа ecto_enum, которая позволяет не писать такие определения типов руками.
источник