使用scalaz kleisli而不在

时间:2016-09-05 09:37:10

标签: scala scalaz function-composition kleisli

我们说我有两个函数val f: A => M[B]val g: B => M[C],其中M是monadic。因此,我想通过使用kleisli来组合它们。 我目前做的是:kleisliU(f) andThenK g 但是我还没有找到一种方法来执行这个组合,而无需先手动包装到kleisli中。

如何编写类似f <???> g的内容,以便f自动包装到kleisli中,然后与g结合使用?我希望scalaz中存在一些东西,并且我不需要编写自己的隐式类/转换。

为了完整起见,这也应该适用于更多功能,例如: f <???> g <???> h

1 个答案:

答案 0 :(得分:1)

一旦我想要同样的东西,我没有在scalaz中找到它,所以我自己写了:

implicit def toKleisliK[M[_], A, B]: (A => M[B]) => Kleisli[M, A, B] = f => { 
    kleisli[M, A, B](a => f(a)) 
}
// then for example you can write such:
val f: Int => Option[String] = ???
val g: String => Option[Double] = ???
val result = f andThenK g // inferred type is ReaderT[Option, Int, Double]
相关问题