假设我有:
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
插件,将是什么等效类型?
尝试
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] = ???
}