了解Scalaz Kleisli

时间:2015-04-23 09:32:22

标签: scala scalaz

我经常写这样的代码:

abstract class Foo [T[+_]: Monad]
{
  def getStr (): T[String]
}

object Example
{
  def f [T[+_]: Monad] (bar: String): ReaderT[T, Foo[T], String] = {
    Kleisli { foo =>
      for {
        str <- foo.getStr ()
      } yield str + bar
    }
  }
}

我知道上面的代码是做什么的,但是我并不完全理解Kleisli部分的内部工作原理。

查看源代码我可以看到Kleisli类型表示一个接受类型的函数,并返回以更高阶类型包装的另一个类型:

/**
 * Represents a function `A => M[B]`.
 */

如何用它来解释我上面发布的例子?

Kleisli可以使用哪些其他内容?

0 个答案:

没有答案