Konrad Hinsen、Jim Duey、およびLeonardo Borgesによる Clojure のモナドに関する優れた作業がいくつかあります。
私の質問は、Clojure で Free Monad を実行することは可能ですか?
これは、 Scala に関する記事のHaskell の例です。
data Free f r = Free (f (Free f r)) | Pure r
これは対応する Scala の例です
sealed abstract class Free[S[+_], +A](implicit S: Functor[S]) {
final def map[B](f: A => B): Free[S, B] =
flatMap(a => Return(f(a)))
final def flatMap[B](f: A => Free[S, B]): Free[S, B] = this match {
case Gosub(a, g) => Gosub(a, (x: Any) => Gosub(g(x), f))
case a => Gosub(a, f)
}
...
}