otherFooOp(s: String): F[Unit]
}
object FooOps {
sealed trait FooOpsFree[A]
object FooOpsFree {
case class FooOp(i: Int) extends FooOpsFree[Out]
....
}
implicit def free[F[_]: Inject[FooOpsFree, ?[_]] = new FooOps[Free[F, ?]] {
def fooOp(i: Int) = Free.inject(FooOpsFree.FooOp(i))
...
}
}
причем это все бойлерплейт и у меня уже почти готов макрос @free, хакаю скаламету заодно )
Обсуждают сегодня