【发布时间】:2022-06-15 20:34:55
【问题描述】:
我试图写一个Kleisli.ap函数。
final case class Kleisli[F[_], -A, B](run: (A) ⇒ F[B]) extends Product with Serializable
def ap[C, D, AA <: A](f: Kleisli[F, AA, C])(implicit F: Apply[F], ev: As[B, (C) ⇒ D]): Kleisli[F, AA, D]
但是
import cats._
import cats.implicits._
import cats.data._
val x: Kleisli[Option,String,Int] = Kleisli(_ => Some(1))
val y: Kleisli[Option,String,Double] = Kleisli(_ => Some(1.0))
val kleisliAp: Kleisli[Option,String,Double] = x.ap(y)
// No implicits found for parameter ev: As[Int, Double => D_]
我看到了这个错误代码并寻找一种方法来创建 As[A,B] 的实例,但找不到。
如果您知道如何解决此问题,请告诉我。
【问题讨论】:
-
catsap 函数具有以下签名:def ap[C, AA <: A](f: Kleisli[F, AA, B => C])(implicit F: Apply[F]): Kleisli[F, AA, C]。如果 y 的定义类似于:val y: Kleisli[Option,String, Int => Double] = Kleisli(_ => Option(_.toDouble)),则这可以用作x.ap(y)。
标签: scala scala-cats cats-effect