Size: a a a

Scala User Group

2020 April 29

DO

Dmytro Orlov in Scala User Group
override def listObjects(bucketName: String, prefix: String, maxKeys: Long): IO[S3Exception, S3ObjectListing] =
   execute(
     _.listObjectsV2(
       ListObjectsV2Request.builder().maxKeys(maxKeys.intValue()).bucket(bucketName).prefix(prefix).build()
     )
   ).map(S3ObjectListing.fromResponse)

 def execute[T](f: S3AsyncClient => CompletableFuture[T]): ZIO[Any, S3Exception, T] =
   ZIO.fromCompletionStage(f(unsafeClient)).refineToOrDie[S3Exception]

 def fromCompletionStage[A](cs: => CompletionStage[A]): Task[A] = javaz.fromCompletionStage(cs)
CompletionStage всё сломал?
источник

VH

Vitalii Honta in Scala User Group
Oleg ℕizhnik
Я думал о следующих группах:
A) Мержинг - можно сделать  наследником Parallel, добавив Alternative [G]
B) Всё, что связано со временем/таймером
C) Всё, что связано с чанками
D) Всё, что связано с ресурсами
E) Всё, что связано с деструктурированием стримов, aka Pull/Enumeratee
F) Всё, что связано с оконными функциями, вроде scan/group и т.п.

Ну и можно отдельнын группы на потребление стримов
Кстати когда то занимался таким. Пытался абстрагироваться над аккой и спарком. Получилось, но хз теперь что делать. Но код остался, тут куча всяких а-ля тайпкласов под большинство нужд https://github.com/itkpi/trembita/tree/master/kernel/src/main/scala/trembita/operations
источник

GP

Grigory Pomadchin in Scala User Group
Vitalii Honta
Кстати когда то занимался таким. Пытался абстрагироваться над аккой и спарком. Получилось, но хз теперь что делать. Но код остался, тут куча всяких а-ля тайпкласов под большинство нужд https://github.com/itkpi/trembita/tree/master/kernel/src/main/scala/trembita/operations
чет не увидел как ты расправился с класстегами спарка
куда смтореть?
источник

VH

Vitalii Honta in Scala User Group
Grigory Pomadchin
чет не увидел как ты расправился с класстегами спарка
куда смтореть?
а никак, пришлось их втащить в кор модель
источник

VH

Vitalii Honta in Scala User Group
Но у меня была цель скорее придумать общею абстракцию над всем этим, чем писать код абстрагируясь над рантаймом.
Так можно гонять данные в спарке, потом лениво вытянуть акка стримом, либо наоборот
источник

VH

Vitalii Honta in Scala User Group
но в любом случаи список а-ля тайпклассов кое-какой там есть. Не tagless final кончено, ведь это интёрнал вещи, но с этого можно начинать хотя бы (если устраивает однодырочная F)
источник
2020 April 30

ИО

Илья Оськин... in Scala User Group
Господа, кто практикует управление зависимостями через всякие HasContext и тп,расскажите в чём вы видите для себя преимущества такого подхода над обычной передачей зависимостей через конструктор напрямую?
Мне вот пока кажется что свистопляски, которыми сопровождается использование контекстов в большинстве случаев только усложнают жизнь
источник

NV

Nikita Vilunov in Scala User Group
Илья Оськин
Господа, кто практикует управление зависимостями через всякие HasContext и тп,расскажите в чём вы видите для себя преимущества такого подхода над обычной передачей зависимостей через конструктор напрямую?
Мне вот пока кажется что свистопляски, которыми сопровождается использование контекстов в большинстве случаев только усложнают жизнь
А как можно использовать HasContext для DI?
источник

NV

Nikita Vilunov in Scala User Group
Мы вот например передаём зависимости через конструктор, а HasContext используем, ну, для проброса контекста
источник

λ

λoλdog in Scala User Group
Через контекст можно таскать зависимости
источник

ИО

Илья Оськин... in Scala User Group
Поправлюсь, я имел в виду именно проброс зависимостей
источник

D

Daniel in Scala User Group
Nikita Vilunov
Мы вот например передаём зависимости через конструктор, а HasContext используем, ну, для проброса контекста
а кто 'мы'?
источник

ИО

Илья Оськин... in Scala User Group
Я вижу допустим что так используют
RepositoryContext[F](repo1, repo2 ..)
SomeService[F](implicit val ctx: F HasContext RepositoryContext[F]) {
 def foo = F.ask(ctx => …)
}
источник

ИО

Илья Оськин... in Scala User Group
Не ясно зачем такое усложнение
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
Илья Оськин
Я вижу допустим что так используют
RepositoryContext[F](repo1, repo2 ..)
SomeService[F](implicit val ctx: F HasContext RepositoryContext[F]) {
 def foo = F.ask(ctx => …)
}
там же обычно конфиги всякие таскают и все такое
источник

ИО

Илья Оськин... in Scala User Group
А допустим, когда помимо F[_] есть ещё один контекст, допустим D[_] (под эффект для работы с бд), становится совсем сложно
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
или когда ты хочешь логгировать или чет еще делать, неявно используя контекст этот
источник

NV

Nikita Vilunov in Scala User Group
Λнтон Войцишевский
там же обычно конфиги всякие таскают и все такое
Какое преимущество в таскании конфигов через HasContext по сравнению со смарт-конструктором, возвращающим I[SomeService[F]]?
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
у тебя может быть логгинг, который смотрит в контекст
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
Nikita Vilunov
Какое преимущество в таскании конфигов через HasContext по сравнению со смарт-конструктором, возвращающим I[SomeService[F]]?
какое преимущество имплиситов по сравнению с передачей аргументов явно?
источник