Is it possible to make Emm Monad in Clojure?

We saw the Free Monad , Modern Reader and IO Monad in Clojure.

We saw Eff Monad - this is the best Monad transformer in Haskell.

We also saw Monad Transformers , and free Monad in Clojure .

Daniel Spivak tried to improve Eff Monad, Emm Monad in Scala . It looks like this:

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

My question is: Can I make Eff Monad in Clojure?

+4
source share

Source: https://habr.com/ru/post/1621352/


All Articles