Scala monads - "value map is not a member of" 错误

Scala monads - "value map is not a member of" error

我创建了一个简单的 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
  }
}

BetBetIdcase 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) 这对我来说是 st运行ge - 为什么我不能 return 来自 for-comprehension?这个想法是 return 作为参数给定的相同对象,但具有 运行dom id.

我想也许我需要新的 Bet class 的实例,但后来我无法 return 它像我想的那样 F[_]

Bet(BetId(id), bet.stake, bet.name)Bet 类型,但预期类型是 F[Bet].

尝试

import cats.syntax.functor._

for {
  created <- Applicative[F].pure(Bet(BetId(id), bet.stake, bet.name))
} yield created

import cats.syntax.functor._
import cats.syntax.applicative._

for {
  created <- Bet(BetId(id), bet.stake, bet.name).pure
} yield created

Applicative[F].pure(Bet(BetId(id), bet.stake, bet.name))

import cats.syntax.applicative._

Bet(BetId(id), bet.stake, bet.name).pure