У меня есть игрушка DSL
case class Logging[A](msg: String, action: A)
case class Persist[A](msg: String, action: A)
type Effect[A] = EitherK[Logging, Persist, A]
, которую я хочу соединить с таким же игрушечным переводчиком
case class CoLogging[A](run: String => A)
case class CoPersist[A](run: String => A)
type Interp[A] = Tuple2K[CoLogging, CoPersist, A]
Вот пример программы:
def prog(implicit L: Logs[Effect], P: Persists[Effect]): Free[Effect, Unit] =
P.store("bar") >> L.log("foo")
и вот переводчик:
def interpretEffect(implicit CL: CoLogs[IO], CP: CoPersists[IO]): Cofree[Interp, IO[Unit]] =
Cofree.unfold(IO.pure(())) { a: IO[Unit] => Tuple2K(CoLogging(CL.coLog(a)), CoPersist(CP.coPersist(a))) }
Я заплатил должную осмотрительность и определил функторы, а также последствия для инъекций. Компилятор жалуется, что не может найти экземпляр cats.Functor[[A]cats.data.Tuple2K[example.CoLogging,example.CoPersist,A]]
, хотя я импортирую cats.data.Tuple2K._
, где экземпляр неявно определен .
Я не вижу, что я делаю неправильно, это должно быть что-то глупое. Есть ли у вас какие-либо идеи? Весь код можно увидеть в этой сущности .