Scala 有可能在Clojure做Emm单子吗?

Scala 有可能在Clojure做Emm单子吗?,scala,haskell,clojure,Scala,Haskell,Clojure,我们在Clojure看到了,和 我们在Haskell看到了-这是一个更好的Monad转换器 我们也看到了 已寻求改进Eff单子,具有。看起来是这样的: 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]

我们在Clojure看到了,和

我们在Haskell看到了-这是一个更好的Monad转换器

我们也看到了

已寻求改进Eff单子,具有。看起来是这样的:

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
def readName:Task[String]=???
def日志(消息:字符串):任务[单位]=???
类型E=任务|:选项|:基础
val效应:Emm[E,字符串]=用于{

首先EFF monad是否保护您的其他monad在线权利?我假设您想要一个答案,而不仅仅是他们两人都在使用完整的语言,因此可以在两种语言上执行相同的操作?介意我将标题改为“如何在Clojure中编写Emm monad?”谢谢亚瑟-如果你认为这会有帮助的话。我认为这是不必要的,因为其他时候clojure问题中的monad是以这种形式被问到的-所以更改标题应该是不必要的,并且会使其不一致,但我会听从你的判断。关于是否可能的问题与不同语言类型的性质。如果你认为最好的话,请改变。