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