ЮБ
Size: a a a
ЮБ
ΛВ
ЮБ
ΛВ
ΛВ
def foo[F[_]: MonadThrow, A](opt: Option[A])(default: F[A]): F[A] =
opt.pure.getOrElseF(default)
ΛВ
def getOrElseF[B >: A](fa: => F[B])(implicit F: Monad[F]): F[B] =
lhs.flatMap(_.fold(fa)(F.pure))
ЮБ
ΛВ
ΛВ
ЮБ
Oℕ
Oℕ
NK
def zip[E,A](a: Either[E,A], b:Either[E,A]): Either[Seq[E], (A,A)] = ???
SA
ValidatedNec
из котов будет лучшим решением.NK
В
import cats.implicits._
val e1: Either[String, Int] = Left("hello")
val e2: Either[String, Int] = Left("world")
(e1, e2).parTupled
IV
IV
withProducer { (producer, blocking) =>
blocking(producer.beginTransaction())
.bracketCase { _ =>
records.records
.traverse(KafkaProducer.produceRecord(keySerializer, valueSerializer, producer))
.map(_.sequence)
} {
case (_, ExitCase.Completed) =>
blocking(producer.commitTransaction())
case (_, ExitCase.Canceled | ExitCase.Error(_)) =>
blocking(producer.abortTransaction())
}
}.flatten
.handleErrorWith { case e: KafkaException =>
log.error(s"Error $e") *>
produceTransaction(records)
}
IT
class Key(name: String) extends StaticAnnotation
, и я аннотирую им данные:
case class Person(
@Key("First Name") name: String,
address: Address
)
case class Address(
@Key("Street") street: String,
@Key("City") city: String
)
ЮБ