Size: a a a

Scala User Group

2020 July 28

D

Dreamerinnoise in Scala User Group
Kai
Если много - значит ты его на скале сделал и не заметил просто
толсто
источник

λ

λoλcat in Scala User Group
Kai
Нет, на скале еще и деньги зарабатывают
И стейки едят вместо папыджонса
источник

GD

Gleb Donets in Scala User Group
Kai
Если много - значит ты его на скале сделал и не заметил просто
Вот это неплохо было. Больно так, жизненно
источник
2020 July 29

IU

Igor Udovichenko in Scala User Group
Пытаюсь от circe.generic.auto._ перейти на @ConfiguredJsonCodec
1. действительно ли стоит?
2. это же то же самое что derivedDecoder?
3. как вернее всего понять, куда еще надо добавить @Configured, а то sbt compile показывает проблему только в верхнем кейз-классе, а в каждый кейз используемый в нем - нужно заходить
источник

GP

Grigory Pomadchin in Scala User Group
@iOgre

1. да
2. deriveConfigured{Encoder|Decoder} из circe extras пакета
3. все вложения должны иметь кодеки, для configured тебе надо что бы конфигурация была в скоупе; если ее нет - будут проблемы (ну раньше, по крайней мере, так было; если что не поменялось в новых релизах)
источник

IU

Igor Udovichenko in Scala User Group
да, я понял что если у меня case class A(x:CaseClassX, y:CaseClassY), то нужно чтобы кодек был и у CaseClassX, и у CaseClassY и далее, рекурсивно
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Vasiliy Efimov
С недавних пор это экспериментальная часть языка, поддерживает не только Future

https://github.com/scala/scala/releases/tag/v2.13.3
это не совсем часть языка
синтаксически в языке ничего не изменилось, но в компилятор добавили возможности, позволяющие библиотекам вроде scala-async делать более эффективные преобразования деревьев, чем раньше делались на макросах
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Apache DOG™
Ну зачем тащить эту гадость из шарпов в скалу?
это же расширение может позволить и для любых других монадоподобных типов написать похожие синтаксические преобразования
источник

VE

Vasiliy Efimov in Scala User Group
Oleg ℕizhnik
это не совсем часть языка
синтаксически в языке ничего не изменилось, но в компилятор добавили возможности, позволяющие библиотекам вроде scala-async делать более эффективные преобразования деревьев, чем раньше делались на макросах
Там какой-то общий механизм появился? Мне казалось что новую фазу добавили исключительно для async
источник

Oℕ

Oleg ℕizhnik in Scala User Group
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Вот тут пример врайтера
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
Igor Udovichenko
Пытаюсь от circe.generic.auto._ перейти на @ConfiguredJsonCodec
1. действительно ли стоит?
2. это же то же самое что derivedDecoder?
3. как вернее всего понять, куда еще надо добавить @Configured, а то sbt compile показывает проблему только в верхнем кейз-классе, а в каждый кейз используемый в нем - нужно заходить
Можете попробовать derevo и магнолиевые декодеры/енкодеры из derevo.circe.magnolia, так будет подсказывать, у каких классов нет кодеков
источник

AD

Apache DOG™ in Scala User Group
Oleg ℕizhnik
это же расширение может позволить и для любых других монадоподобных типов написать похожие синтаксические преобразования
Сам синкасис противный, а не семантика. Ключевой поинт что это "понятнее" в корне не верен. Почему функции это непонятно, а вкрюченный прибитый гвоздями синтаксис async await никак напрямую не связанный с объектом это дохрена сразу понятно?
источник

λ

λoλdog in Scala User Group
Λнтон Войцишевский
Можете попробовать derevo и магнолиевые декодеры/енкодеры из derevo.circe.magnolia, так будет подсказывать, у каких классов нет кодеков
Нет
источник

VE

Vasiliy Efimov in Scala User Group
То есть в самом макро помечается нужное определение и предоставляется реализация StateMachine, которую потом будет разворачивать отдельная фаза?

Значит для своих монадок придётся дописывать отдельно
источник

VE

Vasiliy Efimov in Scala User Group
Apache DOG™
Сам синкасис противный, а не семантика. Ключевой поинт что это "понятнее" в корне не верен. Почему функции это непонятно, а вкрюченный прибитый гвоздями синтаксис async await никак напрямую не связанный с объектом это дохрена сразу понятно?
зато сразу видна императивная суть монад
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Apache DOG™
Сам синкасис противный, а не семантика. Ключевой поинт что это "понятнее" в корне не верен. Почему функции это непонятно, а вкрюченный прибитый гвоздями синтаксис async await никак напрямую не связанный с объектом это дохрена сразу понятно?
Я согласен на -100%. Т.е. с точностью до наоборот.
Синтаксис соответствует расширениям вроде !-notation в идрис.
Т.е. вместо того, чтобы именовать каждый промежуточный результат в вашей процедуре, как вы это делаете в do\for,  вы можете писать сложные выражения вроде, т.е. вместо
  reserved <- reservedAmount
 items <- readItems
 itemsTotal = items.map(_.value).sum
 available <- availableAmount
 result = available - (reserved + itemsTotal)

и

result <- (readItems, availableAmount, items)
          .mapN{ (reserved, available, itemsTotal) => available - (reserved + itemsTotal)}


вы пишете
val result = !availableAmount - (!resevedAmount + (!readItems).map(_.value).sum )
или то же самое
val result = async(availableAmount) - (async(reservedAmount) + async(readItems).map(_.value).sum)

Как раз наличие такого синтаксиса я вижу только в положительном свете, а вот то, что он всегда транслируется в какую-то мутабельную стейтмашину - не очень
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Vasiliy Efimov
зато сразу видна императивная суть монад
Ну она и так видна, а вот то, что в текущем синтаксисе нельзя субвыражения композить нормально вызывает у меня флешбеки от разработки на ЯП, у которых в 2010-м нельзя было
источник

AD

Apache DOG™ in Scala User Group
Oleg ℕizhnik
Я согласен на -100%. Т.е. с точностью до наоборот.
Синтаксис соответствует расширениям вроде !-notation в идрис.
Т.е. вместо того, чтобы именовать каждый промежуточный результат в вашей процедуре, как вы это делаете в do\for,  вы можете писать сложные выражения вроде, т.е. вместо
  reserved <- reservedAmount
 items <- readItems
 itemsTotal = items.map(_.value).sum
 available <- availableAmount
 result = available - (reserved + itemsTotal)

и

result <- (readItems, availableAmount, items)
          .mapN{ (reserved, available, itemsTotal) => available - (reserved + itemsTotal)}


вы пишете
val result = !availableAmount - (!resevedAmount + (!readItems).map(_.value).sum )
или то же самое
val result = async(availableAmount) - (async(reservedAmount) + async(readItems).map(_.value).sum)

Как раз наличие такого синтаксиса я вижу только в положительном свете, а вот то, что он всегда транслируется в какую-то мутабельную стейтмашину - не очень
Первый вариант лучше
источник

GP

Grigory Pomadchin in Scala User Group
Λнтон Войцишевский
Можете попробовать derevo и магнолиевые декодеры/енкодеры из derevo.circe.magnolia, так будет подсказывать, у каких классов нет кодеков
совет конечно :/ как ток он отвечает на вопрос
источник