Scala 有没有有趣的例子组成克莱斯利自同态?

Scala 有没有有趣的例子组成克莱斯利自同态?,scala,scalaz,kleisli,Scala,Scalaz,Kleisli,这是我上一篇文章的后续文章 我们可以将一个通过路径(List[String],XmlNode)=>Option[XmlNode]查找XML节点的函数定义为按名称获取子节点的函数的组合(String,XmlNode)=>Option[XmlNode] 我们使用函数A=>M[A],其中M是单子,形成monoid,因此我们可以轻松地组合它们 现在我想知道是否还有其他有趣的例子来编写这样的函数。学习Scalaz的骑士任务示例 以前 def in3: List[KnightPos] = for {

这是我上一篇文章的后续文章

我们可以将一个通过路径
(List[String],XmlNode)=>Option[XmlNode]
查找XML节点的函数定义为按名称获取子节点的函数的组合
(String,XmlNode)=>Option[XmlNode]

我们使用函数
A=>M[A]
,其中
M
是单子,形成
monoid
,因此我们可以轻松地组合它们


现在我想知道是否还有其他有趣的例子来编写这样的函数。

学习Scalaz的骑士任务示例

以前

def in3: List[KnightPos] =
  for {
    first <- move
    second <- first.move
    third <- second.move
  } yield third

def canReachIn3(end: KnightPos): Boolean = in3 contains end

很好的例子。谢谢
val moveK: Kleisli[List, KnightPos, KnightPos] = Kleisli(_.move)

def in(n: Int): List[KnightPos] =
  moveK.endo.multiply(n).run.run(this)

def canReachIn(n: Int, end: KnightPos): Boolean = in(n) contains end