Limites para o parâmetro de tipo de FunctionK

estou a usarcats FreeMonad. Aqui está uma versão simplificada da álgebra:

sealed trait Op[A]

object Op {
    final case class Get[T](name: String) extends Op[T]

    type OpF[A] = Free[Op, A]

    def get[T](name: String): OpF[T] = liftF[Op, T](Get[T](name))
}

Um dos intérpretes será um invólucro em torno de uma biblioteca de terceiros, chamadaClient aqui qual a suaget A assinatura do método é semelhante a:

class Client {
    def get[O <: Resource](name: String)
        (implicit f: Format[O], d: Definition[O]): Future[O] = ???
}

Minha pergunta é como posso codificar esse requisito na minha implementação?

class FutureOp extends (Op ~> Future) {
    val client = new Client()

    def apply[A](fa: Op[A]): Future[A] =
        fa match {
            case Get(name: String) =>
                client.get[A](name)
        }
}

Eu tentei coisas como a introdução de limites para o meuapply (gostarapply[A <: Resource : Format : Definition]) que não funcionou.

Eu entendi aquiloFunctionK é transformar valores de tipos ordenados de primeira ordem, mas existe alguma maneira em que eu possa codificar os requisitos do parâmetro type?

Pretendo usá-lo como:

def run[F[_]: Monad, A](intp: Op ~> F, op: OpF[A]): F[A] = op.foldMap(intp)

val p: Op.OpF[Foo] = Op.get[Foo]("foo")

val i = new FutureOp()

run(i, d)

questionAnswers(2)

yourAnswerToTheQuestion