2

据我了解,自由构造允许将任何 Functor 提升到 Monad。当我使用 Cats 库时,即使不提供仿函数实例,我也可以将此 ADT 提升到 monad,这怎么可能?

sealed trait DataA[A]

case class GetData(id: String) extends DataA[String]

case class SaveData(d: String) extends DataA[Unit] 

同样在传统(简单)方法中,当 Free 定义为

trait Free[F[_], A]

final case class Pure[F[_], A](a: A) extends Free[F, A]

final case class Suspend[F[_], A](a: F[Free[F, A]]) extends Free[F, A]

我将不得不继续编码我的 ADT:

sealed trait DataA[A]

case class GetData(id: String, cont: A) extends DataA[A]

case class SaveData(d: String, cont: A) extends DataA[A] 

当我使用 Cats 时,我不必提供 cont 参数,为什么?

4

0 回答 0