Я хотел бы использовать Applicative[F]
как-то иначе, чем явно. В настоящее время у меня есть простой код:
class BettingServiceMock[F[_] : Async] extends BettingService[F] {
override def put(bet: Bet): F[Bet] = {
for {
created <- Bet(Some(BetId(randomUUID().toString)), bet.stake, bet.name).pure
} yield created
}
}
Bet
— это просто case class
. Я использую явный метод pure
для возврата F[Bet]
. Есть ли способ сделать это не так (чтобы не вызывать метод pure
явно)? Я пытался сделать что-то вроде этого:
class BettingServiceMock[F[_] : Async] (implicit a:Applicative[F]) extends BettingService[F] {
override def put(bet: Bet): F[Bet] = {
for {
created <- Bet(Some(BetId(randomUUID().toString)), bet.stake, bet.name)
} yield created
}
}
Не помогло, так как вылезла ошибка: value map is not a member of model.Bet <- (Some(BetId(randomUUID().toString)), bet.stake, bet.name)
Я хотел бы найти хорошую практику в Cats
, поэтому я и спрашиваю об этом. Я не думаю, что явный вызов методов, таких как pure
, является хорошей практикой. Не могли бы вы помочь мне с этим?