Size: a a a

Scala User Group

2020 January 01

Oℕ

Oleg ℕizhnik in Scala User Group
Зачем забывать про лифтФ, чем ему мешают тайпклассы
источник

SA

Sergey Alaev in Scala User Group
Oleg ℕizhnik
Я не понял этого довода
def a[F[_]]: F[A] = ???
def b[F[_]]: Resource[F, B] = ???
val result[F[_]]: Resource[F, C] = for { a <- Resource.liftF(a) ; b <- b } yield a + b

vs
def a[F[_]]: F[A] = ???
def b[F[_]: Disposable]: F[B] = ???
val result[F[_]: Disposable]: F[C] = for { a <- a ; b <- b } yield a + b
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Sergey Alaev
def a[F[_]]: F[A] = ???
def b[F[_]]: Resource[F, B] = ???
val result[F[_]]: Resource[F, C] = for { a <- Resource.liftF(a) ; b <- b } yield a + b

vs
def a[F[_]]: F[A] = ???
def b[F[_]: Disposable]: F[B] = ???
val result[F[_]: Disposable]: F[C] = for { a <- a ; b <- b } yield a + b
однозначно первое
источник

SA

Sergey Alaev in Scala User Group
Oleg ℕizhnik
однозначно первое
потому, что?
источник

NV

Nikita Vilunov in Scala User Group
Sergey Alaev
def a[F[_]]: F[A] = ???
def b[F[_]]: Resource[F, B] = ???
val result[F[_]]: Resource[F, C] = for { a <- Resource.liftF(a) ; b <- b } yield a + b

vs
def a[F[_]]: F[A] = ???
def b[F[_]: Disposable]: F[B] = ???
val result[F[_]: Disposable]: F[C] = for { a <- a ; b <- b } yield a + b
Как выглядит реализация композиции двух Disposable?
источник

SA

Sergey Alaev in Scala User Group
Nikita Vilunov
Как выглядит реализация композиции двух Disposable?
какой именно композиции? Монада, реализующая Disposable - это Resource
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Sergey Alaev
потому, что?
потому что ресурс - это чистая структура данных очень локально полезная
фактически никакой пользы информация о самом типе данных Resource не несёт, гораздо полезнее какими свойствами обладает F, на базе которого Resource построен

но это не столь важно, скорее стоит спросить - какова мотивация для абстракции
какие альтернативные реализации вы хотите контролировать, какое поведение постулируете
источник

NV

Nikita Vilunov in Scala User Group
А не проще пойти по другому пути через ридеры и ApplicativeAsk/HasContext?
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Иными словами, какую проблему вы решаете, вводя такую абстракцию
источник

SA

Sergey Alaev in Scala User Group
Nikita Vilunov
А не проще пойти по другому пути через ридеры и ApplicativeAsk/HasContext?
не уверен, что можно выразить ресурс через ApplicativeAsk
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Sergey Alaev
не уверен, что можно выразить ресурс через ApplicativeAsk
нельзя
источник

SA

Sergey Alaev in Scala User Group
Oleg ℕizhnik
Иными словами, какую проблему вы решаете, вводя такую абстракцию
проблему композиции. допустим, мы пишем код инициализации приложения из 20 подмодулей. Допустим, 10 подмодулей у нас грязные, они возвращают F[A], а вторые 10 - аллоцируют системные ресурсы и возвращают Resource[F, A]. И вот их надо свести в один фор.
источник

NV

Nikita Vilunov in Scala User Group
Sergey Alaev
не уверен, что можно выразить ресурс через ApplicativeAsk
Его и не нужно выражать, речь о сборе клейсли, а потом использовании в нормальном ресурсе
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Sergey Alaev
проблему композиции. допустим, мы пишем код инициализации приложения из 20 подмодулей. Допустим, 10 подмодулей у нас грязные, они возвращают F[A], а вторые 10 - аллоцируют системные ресурсы и возвращают Resource[F, A]. И вот их надо свести в один фор.
Как вы решите эту проблему, если в итоге первые 10 вернут F, а вторые 10 - G
источник

SA

Sergey Alaev in Scala User Group
Nikita Vilunov
Его и не нужно выражать, речь о сборе клейсли, а потом использовании в нормальном ресурсе
не понял мысль
источник

SA

Sergey Alaev in Scala User Group
Oleg ℕizhnik
Как вы решите эту проблему, если в итоге первые 10 вернут F, а вторые 10 - G
нет, и те, и другие вернут F, т.к. их фабричные методы выглядят как apply][F[_]: ....]: F[Module]
источник

Oℕ

Oleg ℕizhnik in Scala User Group
И вам всё равно нужно будет добавлять некоторый код трансформации, т.е. код не станет проще использования Resource.lift
источник

NV

Nikita Vilunov in Scala User Group
С Новым годом Сергей
источник

SA

Sergey Alaev in Scala User Group
Oleg ℕizhnik
И вам всё равно нужно будет добавлять некоторый код трансформации, т.е. код не станет проще использования Resource.lift
? нет, нужно будет только написать инстанс Disposable для ресурса. а потом - Application[Resource[IO, *]]
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Sergey Alaev
нет, и те, и другие вернут F, т.к. их фабричные методы выглядят как apply][F[_]: ....]: F[Module]
Вы не можете получить для Resource все те же качества, которые были у F
источник