Высший добрый тип и финал Tagless

Я пытаюсь написать функцию, которая может взять любую конечную черту без тега и вернуть F[String],

def apply[Api[F[_]]](implementation: Api[F[_]]): F[String] = ???

Я не понимаю, почему выше не компилируется.

Следующие работы.

trait Api[F[_]]

def apply[F[_]](implementation: Api[F[_]]): F[String] = ???

Но как я могу избавиться от этой черты?

1 ответ

Решение

Пытаться

def apply[Api[_[_]], F[_]](implementation: Api[F]): F[String] = ???

Когда ты пишешь apply[Api[F[_]]](..) ты не заявляешь Api а также Fзаявляешь только Api, Там F не имеет значения, вы можете написать apply[Api[F[_]]](..) или же apply[Api[G[_]]](..) или просто apply[Api[_[_]]](..)во всяком случае вы не можете использовать F вне.

Api[F[_]] правильный синтаксис в объявлении параметра типа, в приложении типа в позиции типа вы должны написать Api[F],

Другие вопросы по тегам