Высший добрый тип и финал Tagless - PullRequest
0 голосов
/ 26 сентября 2018

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

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

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

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

trait Api[F[_]]

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

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

1 Ответ

0 голосов
/ 26 сентября 2018

Попробуйте

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].

...