Size: a a a

Scala User Group

2020 January 17

AH

Ayrat Hudaygulov in Scala User Group
А нельзя починить мою попытку имплисита выше?
источник

DM

Daniel Matveev in Scala User Group
λλ
Мне кажется можно макросом или нельзя?
Да, derevo это и делает
источник

λ

λλ in Scala User Group
Daniel Matveev
Да, derevo это и делает
Что за дерево
источник

DM

Daniel Matveev in Scala User Group
источник

λ

λoλegΥch in Scala User Group
без супертагедов как-то так https://scastie.scala-lang.org/1Pvxc1RrTnCEsFuQslOMjw
источник

λ

λoλegΥch in Scala User Group
(с плеем вместо цирке)
источник

λ

λλ in Scala User Group
Нот бед
источник

AH

Ayrat Hudaygulov in Scala User Group
Окей, то есть для супертагед + кирке решений кроме как писать ручками эту срань нет?
источник

λ

λoλegΥch in Scala User Group
не, это не связаные вещи
источник

λ

λoλegΥch in Scala User Group
прост автодеривацию не стоит юзать
источник

λ

λoλegΥch in Scala User Group
супертагед тоже в подобных случаях
источник

AS

Aλeχander Semenov in Scala User Group
мы пишем руками, вообще хорошо контроллировать, что может попасть в JSON, так что это в целом - норм
источник

M

Mikhail in Scala User Group
Ayrat Hudaygulov
Нужен совет. Есть circe и supertagged. circe не вывозит инстансы Encoder для тегированых типов что логично. Но выводить их ручками не хочется.

Все мои тегированные типы примитивные (не могут вкладываться друг в друга, внутри тега всегда лежит тип для которого circe может вывести енкодер самостоятельно).

Я попытался сделать это
https://scastie.scala-lang.org/i2EW3gZ6R3aWagUwPIcXMQ

как видно asJson на обычном типе работает, а на типе с тегом выдает
Error:(26, 5) diverging implicit expansion for type io.circe.Encoder[Foo]
starting with lazy value encodeZoneOffset in object Encoder
foo.asJson


Вопрос. Как правильно написать этот хитрый имплисит чтобы не выводить енкодеры для всех этих примитивных типов?
IN <: TaggedType[T]
- так делать нельзя. Если тебе надо разложить таггет тип, то надо делать def [T, U]:T @@ U или иногда даже еще помочь более конкретно (без альяса) Tagged[T,U]
источник

AH

Ayrat Hudaygulov in Scala User Group
Mikhail
IN <: TaggedType[T]
- так делать нельзя. Если тебе надо разложить таггет тип, то надо делать def [T, U]:T @@ U или иногда даже еще помочь более конкретно (без альяса) Tagged[T,U]
Хм. Не сказать что понял
источник

AH

Ayrat Hudaygulov in Scala User Group
У TaggedType есть метод raw, он достаёт внутрянку
источник

M

Mikhail in Scala User Group
Ayrat Hudaygulov
Хм. Не сказать что понял
trait TaggedType это хелпер для связки, для скоупа и т.д. Если ты имеешь дело с выводом типов, енкодеров для них и т.д. то тебе надо иметь дело именно с типами, а не хелпер трейтами. А ордер айди есть (T @@ U), где T = String, U = OrderId.Tag
источник

M

Mikhail in Scala User Group
потому запись IN <: TaggedType - тебе нигде и никогда не пригодится для вывода типов и всего, что на них основано
источник

AH

Ayrat Hudaygulov in Scala User Group
Mikhail
потому запись IN <: TaggedType - тебе нигде и никогда не пригодится для вывода типов и всего, что на них основано
Но так можно вызвать тот самый raw!

Но ок, попробую по-другому
источник

M

Mikhail in Scala User Group
Ayrat Hudaygulov
Но так можно вызвать тот самый raw!

Но ок, попробую по-другому
Погоди, я погляжу, что именно там тебе нужно
источник

AH

Ayrat Hudaygulov in Scala User Group
Mikhail
Погоди, я погляжу, что именно там тебе нужно
Там надо чтобы для типов, в которых есть теги, выводились енкодеры аатомагически
источник