具有多个类型的类型的Functor实现

问题描述 投票:1回答:1

假设我有:

trait Get[F[_], A, B]{
  def get(a:A): F[B]
}

我希望能够映射到结果类型B,即我希望能够:

val getFoo: Get[IO, String, Foo] = ???
val foo2Bar: Foo => Bar = ???
val getBar: Get[IO, String, Bar] = getFoo.map(foo2Bar)

我知道我应该为Functor实现一个Get实例,但由于我不知道要使用哪种类型的签名,所以我很努力。

我尝试了以下操作:

  • implicit val functor:Functor[Get] = ???

  • implicit val functor: Functor[Lambda[(F[_], K, A) => Get[F, K, A]]] = ???

但是它们似乎不是正确的类型,因为我似乎无法使用顶部所示的functor语法扩展。在这里表达类型的正确方法是什么?如果我使用kind-projector插件,将是什么等效类型?

scala typeclass scala-cats higher-kinded-types higher-order-types
1个回答
0
投票

尝试

implicit def functor[F[_], A]: Functor[Get[F, A, ?]] = new Functor[Get[F, A, ?]] {
  override def map[B, B1](fa: Get[F, A, B])(f: B => B1): Get[F, A, B1] = ???
}
© www.soinside.com 2019 - 2024. All rights reserved.