Size: a a a

Scala User Group

2020 September 08

K

Kai in Scala User Group
Ты постоянно юзаешь local  и меняешь енв в рамках блока?
источник

Oℕ

Oleg ℕizhnik in Scala User Group
у нас есть свой а-ля ридер, называется
trait Env[-R, +A]{
 def run(r: R): monix.Task[A]
}
и есть ZIO
источник

Oℕ

Oleg ℕizhnik in Scala User Group
и есть тупеклассы, чтобы примерно одинаково работать с
Env[R, A], ZIO[R, E, A] и ReaderT[IO, R, A]
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Kai
Ты постоянно юзаешь local  и меняешь енв в рамках блока?
иногда случается
источник

Oℕ

Oleg ℕizhnik in Scala User Group
но чаще просто порождаю контексты с информацией о трейсинге (распределённом), микроконфигами, и другой контекстной штукой
источник

Oℕ

Oleg ℕizhnik in Scala User Group
есть ещё экспериментальная тема, чтобы таскать в ридере имлементации a-la Has
источник

NV

Nikita Vilunov in Scala User Group
Kai
Если юзать спрятанный ридер то я не понимаю в чем его роль вообще, ведь все тайпклассы читающие из ридера могут просто не читать из ридера, а быть оопными классами
что значит оопными классами?
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Nikita Vilunov
что значит оопными классами?
ну видимо что-то с мутабельным стейтом
источник

Oℕ

Oleg ℕizhnik in Scala User Group
вместо функций
источник

K

Kai in Scala User Group
Nikita Vilunov
что значит оопными классами?
Вместо того чтобы иметь тайпкласс который потом читает что-то в методе, параметризировать класс при конструкции
class Has f r Data => MyShit f where method :: f a

=>
final class MyShit[F[_]](data: Data) { def method: F[A] }
источник

NV

Nikita Vilunov in Scala User Group
интересно
источник

𝛈µ

𝛈 µ in Scala User Group
Все-таки для динамических контекстов ридер удобнее и надо начать его активнее внедрять
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Kai
Вместо того чтобы иметь тайпкласс который потом читает что-то в методе, параметризировать класс при конструкции
class Has f r Data => MyShit f where method :: f a

=>
final class MyShit[F[_]](data: Data) { def method: F[A] }
тогда data должна быть одна на все экземпляры запусков
источник

Oℕ

Oleg ℕizhnik in Scala User Group
туда не запихнёшь трейснинг, реквест контекст и локальные микроконфиги
источник

NV

Nikita Vilunov in Scala User Group
Oleg ℕizhnik
тогда data должна быть одна на все экземпляры запусков
он предлагает создавать MyShit на каждый запуск/запрос с нужным контекстом в аргументе
источник

NV

Nikita Vilunov in Scala User Group
если я правильно понял
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Nikita Vilunov
он предлагает создавать MyShit на каждый запуск/запрос с нужным контекстом в аргументе
не думаю
источник

K

Kai in Scala User Group
Нужно сделать тупеклассик который для F[+_, +_] будет выдавать новый контекст в котором видно что этот F <~> F1[-_, +_, +_] где F1 новая переменнная тогда может будет удобнее. А то я пытался заюзать три дырки в аппе где везде две дырки и было как-то жутко неудобно.
источник

Oℕ

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

K

Kai in Scala User Group
Oleg ℕizhnik
не думаю
Да нет, предлагаю. Когда много локальных контекстных параметров я делаю классы в которых все параметры одноранговые и генерирую дистейжем фабрику через которую задаются локальные параметры: https://izumi.7mind.io/latest/release/doc/distage/basics.html#auto-factories
источник