Я создал простой trait
и сервис:
@finalAlg
@autoFunctorK(true)
trait BettingService[F[_]] {
def put(bet: Bet): F[Bet]
}
class BettingServiceMock[F[_] : Async] extends BettingService[F] {
override def put(bet: Bet): F[Bet] = {
val id = randomUUID().toString
for {
created <- Bet(BetId(id), bet.stake, bet.name)
} yield created
}
}
Bet
и BetId
являются case classes
:
case class Bet(betId: BetId, stake: BigDecimal, name: String)
case class BetId(betId: String) extends AnyVal
Когда я запустил эту программу, я получил ошибку: Error:(12, 21) value map is not a member of model.Bet <- Bet(BetId(id), bet.stake, bet.name)
Это что-то странное для меня - почему я не могу вернуть хороший тип из for-comprehension
? Идея этого состоит в том, чтобы вернуть тот же объект, который задан в качестве параметра, но со случайным идентификатором.
Я подумал, что, возможно, мне нужен экземпляр нового Bet
класса, но тогда я не смог вернуть его как F[_]
, как мне кажется.