Size: a a a

Scala User Group

2020 January 29

A

Alex in Scala User Group
например
источник

A

Alex in Scala User Group
вместо asJson[ExampleHttpResponse]
источник

R

Renarde in Scala User Group
Alex
вместо asJson[ExampleHttpResponse]
а, я просто думал что какой-то встроенный механизм для этого есть
источник

A

Alex in Scala User Group
может и есть, сходу хз)
источник
2020 January 30

C

Combot in Scala User Group
Sunny has been banned! Reason: CAS ban.
источник

AS

Alex Sh in Scala User Group
Вопрос на счет Defer + Applicative
Есть ли в cats встроенный аналог такой функции?

def suspend[F[_], A](op: => A)(implicit ap: Applicative[F], de: Defer[F]): F[A] = de.defer(ap.pure(op))
источник

Oℕ

Oleg ℕizhnik in Scala User Group
нет и не должен быть
источник

AS

Alex Sh in Scala User Group
Oleg ℕizhnik
нет и не должен быть
Пчему не может?
источник

Oℕ

Oleg ℕizhnik in Scala User Group
потому что Defer создан для поддержки стек сейфти в аппликативах, комонадах и около того, Defer не означает, что вы можете откладывать сайдэффекты, а единственный разумный повод делать
=> A -  это откладывать сайд эффекты
источник

Oℕ

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

AS

Alex Sh in Scala User Group
Oleg ℕizhnik
потому что Defer создан для поддержки стек сейфти в аппликативах, комонадах и около того, Defer не означает, что вы можете откладывать сайдэффекты, а единственный разумный повод делать
=> A -  это откладывать сайд эффекты
Хм...
В доке cats.Defer явно упомянуто откладывание (the ability to defer)
* Defer is a type class that shows the ability to defer creation
* inside of the type constructor F[_].
источник

Oℕ

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

Oℕ

Oleg ℕizhnik in Scala User Group
оно откладывает вычисления
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Но не сайд эффекты
источник

AS

Alex Sh in Scala User Group
Oleg ℕizhnik
поэтому если ваш  => A несёт какой-то сайд эффект, и вы хотите выразить это в Defer - вы делаете что-то не так
Нужно отложить создание объекта. Конкретно Java KafkaProducer, который потенциально может кинуть Exception из конструктора.
И не хочется тащить Sync[F] для этого
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Нужно тащить Sync[F] для этого
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Defer не предполагает, что будут отлавливаться исключения
источник

AS

Alex Sh in Scala User Group
А если так?

def suspend[F[_], A](op: => A)(implicit ap: ApplicativeError[F, Throwable], de: Defer[F]): F[A] ={
 de.defer {
   val tried = Try(op)
   ap.fromTry(tried)
 }
}
источник

Oℕ

Oleg ℕizhnik in Scala User Group
для Eval и Free[F есть Defer например
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Alex Sh
А если так?

def suspend[F[_], A](op: => A)(implicit ap: ApplicativeError[F, Throwable], de: Defer[F]): F[A] ={
 de.defer {
   val tried = Try(op)
   ap.fromTry(tried)
 }
}
выглядит как эскапизм
источник