def pure[F[_], A](mf: M[F])(a: A): F[A]
def join[F[_], A](mf: M[F])(ffa: F[F[A]]): F[A]
}
object MonadTC {
implicit val catsMonad: MonadTC[cats.Monad] = new MonadTC[cats.Monad] {
override def pure[F[_], A](mf: cats.Monad[F])(a: A): F[A] = mf.pure(a)
override def join[F[_], A](mf: cats.Monad[F])(ffa: F[F[A]]): F[A] = mf.flatten(ffa)
}
}
типа Type Families из хаскелла?
Обсуждают сегодня