ปล่อยให้พวกเราพูดว่าเรามีรหัส(<: Monad[F]
ไม่ได้ทำงานอย่างที่คาดหวัง):
class External[F[_] <: Monad[F] : Concurrent](implicit proxy: Proxy[F]) { ... }
class Proxy[F[_] <: Monad[F]](implicit storage: Storage, async: Async[F]) {
def get(key: String): F[Option[Entry]] = {
async.blocking(storage.get(key))
}
}
ฉันจะชอบ F[_]
ต้องเป็น Monad
ดังนั้นนั่น proxy.get()
มีพวกนั้นลักษณะและเปิดใช้ตัวอย่างเช่น(ภายใน External
ชั้นเรียน):
proxy.get(key).flatMap(...)
ตอนนี้งั้นเหรอแต่เมื่อพยายาม instantiate กับ cats.effect.IO
มันไม่ได้ทำงานให้ External
:
implicit val proxy: Proxy[IO] = new Proxy()
implicit val external: External[IO] = new External()
กับข้อผิดพลาดแสดงผล:
inferred type arguments [[+A]cats.effect.IO[A]] do not conform to value <local External>'s type parameter bounds [F[_] <: cats.Monad[F]]
เป็นอย่างนี้ได้ยังไงซ่อมหรือประสบความสำเร็จในมุมมองที่ต่างออกทาง?
proxy.get()
จะไม่มีMonad
ลักษณะ.