Вопросы по теме 'scala-cats'

Бесплатная монада - неявное внедрение с вложенным сопродуктом с использованием кошек
Скажем, у меня есть три DSL, которые я хочу использовать: sealed trait Test1Op[A] sealed trait Test2Op[A] sealed trait Test3Op[A] object Test1Op { case class Test1() extends Test1Op[String] } object Test2Op { case class Test2() extends...
398 просмотров
schedule 18.04.2024

Практические бесплатные монады для системных тестов DSL: параллелизм и обработка ошибок
Я пытаюсь написать DSL для написания системных тестов в Scala. В этом DSL я не хочу раскрывать тот факт, что некоторые операции могут выполняться асинхронно (поскольку они реализованы, например, с использованием тестируемого веб-сервиса) или что...
484 просмотров

Стекирование бесплатных монад
Я изучаю монады Free и собрал простой пример на Scala, где я использую их для определения двух предметно-ориентированных языков. Первая монада имеет дело с побочными эффектами репозитория. Я реализовал интерпретатор, который использует монаду...
141 просмотров

Экземпляр моноида для A => A в Cats
Функции A => A являются моноидами с identity как empty и композицией как combine . К сожалению, я не нашел его в cats библиотеке. Предоставляет ли библиотека экземпляр моноида для этих функций? Как насчет A => M[A] , где M...
212 просмотров

Почему проверка нарушает законы монад?
В SO дается объяснение, почему проверка, как в скалязе, кошки (Scala) или Arrow (Kotlin) не могут быть монадой. Насколько я понимаю, это потому, что они смоделировали монады в терминах аппликативных функторов, и желаемое поведение валидации как...
286 просмотров

Какова цель использования [T: Type] у кошек?
Я учусь использовать библиотеку кошек Scala. Довольно часто я вижу такое определение, как implicit def validatedApplicative[E : Semigroup]: Applicative[Validated[E, ?]] = ??? def parallelValidate[E : Semigroup, A, B, C](v1: Validated[E, A], v2:...
64 просмотров
schedule 08.04.2024

Scala, коты - как не использовать Applicative[F] явно?
Я хотел бы использовать Applicative[F] как-то иначе, чем явно. В настоящее время у меня есть простой код: class BettingServiceMock[F[_] : Async] extends BettingService[F] { override def put(bet: Bet): F[Bet] = { for {...
87 просмотров
schedule 30.09.2022

Для понимания неполного составления шагов в модульном тесте с использованием Reader
У меня есть окончательная реализация без тегов с модульным тестом, когда я запускаю модульный тест, вызывается только первый шаг, а не остальные. Вот цель теста: class NameThing[F[_]: Monad](implicit console: Console[F]) { def program:...
77 просмотров

fs2 Stream scala Нет неявного типа: Stream.Compiler[Eval,G_]
Я пытаюсь создать Stream[Eval, String] следующим образом: import cats.Eval import cats.effect.{ExitCode, IO, IOApp} import fs2._ object StringEval extends IOApp { def evalString: Eval[String] = Eval.always{ val r = new...
170 просмотров
schedule 24.01.2024

Можно ли разделить чистое состояние FP между несколькими HTTP-запросами на сервере http4s?
Я пытаюсь разделить состояние между несколькими HTTP-запросами на http4s сервере. Вот что я пробовал: for { state <- Ref[F].of(0) _ <- BlazeServerBuilder[F] .bindHttp(port, host) .withHttpApp( ... httpApp...
147 просмотров
schedule 07.02.2024

Изменение типа эффекта fs2.Stream
Я использую doobie, который может создавать fs2.Stream[ConnectionIO, Int] строк базы данных ( Int в моем случае). ConnectionIO[A] - это внутренний тип doobie. Учитывая HKT F[_] и val nt: ConnectionIO ~> F , есть ли способ получить...
186 просмотров

Различные монады для понимания
У меня есть код ниже def processInfoAndReturnResponse(input: Input]): EitherT[Future, CustomException, A] = ??? def sendMessage(message: A): monix.eval.Task[Boolean] = ??? def anotherMethod(message: Input): Future[Either[CustomException, Unit]]=...
136 просмотров

Что на самом деле делает функция IO.suspend в Cats Effect?
Что делает "кошачий эффект" IO.suspend и почему он полезен? Документация есть, но она не совсем ясна. В документации описан следующий вариант использования: import cats.effect.IO def fib(n: Int, a: Long, b: Long): IO[Long] = IO.suspend {...
162 просмотров

Использование свободной монады в функциональном проектировании предметной области
Я новичок в функциональном программировании. Тем не менее, я читал о Free Monad, и я пытаюсь использовать его в игрушечном проекте. В этом проекте я моделирую область портфеля акций. Как предлагалось во многих книгах, я определил алгебру для...
136 просмотров

Scala Doobie не вставляет значения в базу данных
Мой код для вставки значений: def insert(link: entity.Link) : IO[Int] = { logger.info("Inserting link: " + link.toString()) sql"insert into links (title,url,publication_date,feed_id) values...
61 просмотров
schedule 24.03.2024