скажем, у меня есть:
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]]] = ???
но они, похоже, не соответствуют нужному типу, так как я не могу использовать расширение синтаксиса функтора, как показано вверху. Как правильно выразить тип здесь? Каким будет эквивалентный тип, если я использую плагин kind-projector
?