我们在Clojure中看到了Free Monad,The Reader Monad和IO Monad。
我们已经看到Eff Monad - 这是Haskell中更好的Monad变换器。
我们还看到了Monad Transformers和free Monad transformer in Clojure。
Daniel Spiewak寻求通过the Emm Monad in Scala改善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
我的问题是:是否可以在Clojure中使用Eff Monad?