2

私が理解している限り、無料の構築では、任意の Functor を Monad に持ち上げることができます。Cats ライブラリを使用すると、ファンクター インスタンスを提供しなくても、この ADT をモナドに持ち上げることができます。

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