Haskell Ücretsiz uygulamasıdır:Ücretsiz uygulama
:sealed abstract class Free[S[_], A]
private case class Return[S[_], A](a: A) extends Free[S, A]
private case class Suspend[S[_], A](a: S[A]) extends Free[S, A]
private case class Gosub[S[_], B, C](a: Free[S, C], f: C => Free[S, B]) extends Free[S, B]
neden olduğu gibi, Haskell benzer scalaz uygulama değildir: Scalaz içinde uygulanması, oysa
data Free f a =
Pure a
| Free (f (Free f a))
sealed trait Free[F[_],A]
case class Return[F[_],A](a: A) extends Free[F,A]
case class GoSub[F[_],A](s: F[Free[F,A]]) extends Free[F,A]
Bu iki uygulama da izomorfik midir?
İkinci Scala uygulamasını kullanarak bir 'F [A]' verildiğinde nasıl bir 'Free [F, A]' yaratabilirsiniz? –
@PeterNeyens 'F' bir' Functor' olduğunda çok iyi bir şekilde mümkündür. Bu temsil ile ilgili problem, yığın güvenliği sorunlarına yol açmasıdır. –
@TomasMikula. Tamam, GoSub'u görüyorum [F, A] (F.map (fa) (İade [F, A] (_))), teşekkürler! –