【发布时间】:2019-08-28 16:07:33
【问题描述】:
我读过关于无标签决赛的文章,我认为它很棒。我想构建我自己的这种模式的小例子,但遇到了问题。
这是我的代码:
trait Calculator[F[_]] {
def sum(a: Int, b: Int): F[Either[Throwable, Int]]
def minus(a: Int, b: Int): F[Either[Throwable, Int]]
}
object calculatorInstances {
implicit val futureCalculator: Calculator[Future] = new Calculator[Future] {
override def sum(a: Int, b: Int) =
Future {
Try(a + b).toEither
}
override def minus(a: Int, b: Int) =
Future {
Try(a - b).toEither
}
}
}
import calculatorInstances.futureCalculator
def getPlusAndMinus[F[_]: Monad: Calculator](a: Int, b: Int): F[Either[String, Int]] = {
for {
sum <- Calculator[F].sum(a, b)
res <- Calculator[F].minus(sum, b)
} yield res
}
由于not found: value Calculator 错误,此代码不起作用。我怎样才能正确地做到这一点?
【问题讨论】:
标签: scala functional-programming scala-cats tagless-final