Oℕ
Size: a a a
Oℕ
Oℕ
Oℕ
Oℕ
SA
A
и не важно, что в A
.SA
A
. Но выглядит сложным, мне не приходит в голову задач, где такое абстрагирование окупилось бы. Возможно, нужно больше практики.Oℕ
Oℕ
Oℕ
Oℕ
𝛈µ
𝛈µ
Oℕ
Oℕ
𝛈µ
Oℕ
Oℕ
𝛈µ
SA
sealed trait AuthRequestвот, идентичный и более простой код. Без перспектив мутировать в processAll[A, B, C, D, E](req: Req[A], param: Param[B], ....)
case class SimpleAuth(user: String, password: String) extends AuthRequest
case class BearerAuth(token: String) extends AuthRequest
case class ExternalAuth(provider: String, id: UUID) extends AuthRequest
def processAuthReq(req: AuthRequest): IO[Result] = req match {
case SimpleAuth(user, password) => processSimpleAuth(user, password)
case BearerAuth(token) => processBearer(token)
case ExternalAuth(provider, id) => getExtAuthFor(provider).getAuthData(id)
}
Oℕ
sealed trait AuthRequestвот, идентичный и более простой код. Без перспектив мутировать в processAll[A, B, C, D, E](req: Req[A], param: Param[B], ....)
case class SimpleAuth(user: String, password: String) extends AuthRequest
case class BearerAuth(token: String) extends AuthRequest
case class ExternalAuth(provider: String, id: UUID) extends AuthRequest
def processAuthReq(req: AuthRequest): IO[Result] = req match {
case SimpleAuth(user, password) => processSimpleAuth(user, password)
case BearerAuth(token) => processBearer(token)
case ExternalAuth(provider, id) => getExtAuthFor(provider).getAuthData(id)
}