Size: a a a

Scala User Group

2020 February 14

DM

Daniel Matveev in Scala User Group
в контексте фич касандры, как нечто атомарное или еще из какой то теории
источник

v

vaan in Scala User Group
Парни, кто знает, можно ли в scalacache redis получить список ключей по паттерну?  Спасибо!
источник

DM

Daniel Matveev in Scala User Group
Oleg ℕizhnik
Никита имел в виду, чего там нет по сравнению с фундейшон например, как я понял
блин, я забыл что это его любимая база
источник

NM

Nikita Melkozerov in Scala User Group
Daniel Matveev
их можно понять по разному, собсно мой вопрос об этом и был
надо тогда определить что такое траназкция. я исходил из того что под транзакциями большинство сразу думает acid, но ведь в более общем смысле тразакция не обязана обладать этими свойствами, все что ей нужно - быть low latency иначе это батч процессинг
источник

ЮБ

Юрий Бадальянц in Scala User Group
@rudogma пробую новый supertagged. Пробую залифтить энкодеры:
trait encoder {
     type Raw
     type Type
     implicit def liftedEncoder(implicit rawEncoder: Encoder[Raw]): Encoder[Type] = unsafeCast(rawEncoder)
   }
Но откуда мне взять unsafeCast? Он же приватный
источник

M

Mikhail in Scala User Group
Юрий Бадальянц
@rudogma пробую новый supertagged. Пробую залифтить энкодеры:
trait encoder {
     type Raw
     type Type
     implicit def liftedEncoder(implicit rawEncoder: Encoder[Raw]): Encoder[Type] = unsafeCast(rawEncoder)
   }
Но откуда мне взять unsafeCast? Он же приватный
а тебе он и не нужен)
источник

ЮБ

Юрий Бадальянц in Scala User Group
Такой пример в доках
источник

ЮБ

Юрий Бадальянц in Scala User Group
Как мне лифтануть тогда?
источник

ЮБ

Юрий Бадальянц in Scala User Group
Там вообще в блоке про circe явные ошибки
источник

M

Mikhail in Scala User Group
Юрий Бадальянц
Такой пример в доках
точно, надо заменить) вот так попробуй

trait LiftedEncoder[T]  extends TaggedType[T] {
  implicit def circeEncoder(implicit e: Encoder[Raw]): Encoder[Type] = lift
}
источник

ЮБ

Юрий Бадальянц in Scala User Group
Но тогда нужно явно указывать T при примешивании
источник

ЮБ

Юрий Бадальянц in Scala User Group
а с тайп мемберами не надо
источник

M

Mikhail in Scala User Group
Юрий Бадальянц
а с тайп мемберами не надо
без taggedtype у тебя не будет 500% безопасного метода lift, который в себе unsafeCast прячет)
источник

ЮБ

Юрий Бадальянц in Scala User Group
Ок, попробую
источник

M

Mikhail in Scala User Group
По отношению к общему кол-ву кода этот миксин настолько редкая операция, что я счел лучшим указать тип, чем паблишить в протектед ансейф каст
источник

M

Mikhail in Scala User Group
Юрий Бадальянц
а с тайп мемберами не надо
С тайпмембером и так можно, если очень хочется

trait LiftedShow {
 type Raw
 type Tag
 
 implicit def liftedShow(implicit f:Show[Raw]):Show[Raw @@ Tag] = supertagged.lift.LiftF[Show].lift
}
источник

ЮБ

Юрий Бадальянц in Scala User Group
Хм, попробую
источник

ЮБ

Юрий Бадальянц in Scala User Group
Просто хочется этот бойлерплейт перенести на сторону объявления трейта (1 раз), чем на сторону использования (каждый раз)
источник

M

Mikhail in Scala User Group
Mikhail
С тайпмембером и так можно, если очень хочется

trait LiftedShow {
 type Raw
 type Tag
 
 implicit def liftedShow(implicit f:Show[Raw]):Show[Raw @@ Tag] = supertagged.lift.LiftF[Show].lift
}
@lmnet89 fix type Tag <: this.type
источник

ЮБ

Юрий Бадальянц in Scala User Group
Mikhail
@lmnet89 fix type Tag <: this.type
Эта херня реально работает!
источник