是否可以在 Clojure 中执行 Emm Monad?

haw*_*eye 5 haskell scala clojure

我们已经在 Clojure 中看到了Free Monad、The Reader Monad和IO Monad。

我们已经看到了Eff Monad——它是 Haskell 中更好的 Monad 转换器。

我们还看到了Monad Transformers和Clojure 中的免费 Monad 转换器 。

Daniel Spiewak试图通过Scala 中的 Emm Monad改进 Eff Monad 。它看起来像这样:

def readName: Task[String] = ???
def log(msg: String): Task[Unit] = ???

type E = Task |: Option |: Base

val effect: Emm[E, String] = for {
  first <- readName.liftM[E]
  last <- readName.liftM[E]

  name <- (if ((first.length * last.length) < 20) Some(s"$first $last") else None).liftM[E]

  _ <- log(s"successfully read in $name").liftM[E]
} yield name
Run Code Online (Sandbox Code Playgroud)

我的问题是:是否可以在 Clojure 中执行 Eff Monad?