Scalaz Kleisli的使用益处
发布时间:2020-12-16 18:52:57 所属栏目:安全 来源:网络整理
导读:在 scalaz中,Kleisli [M [_],A,B]是A =的包装器. M [B],允许组合这些功能.例如,如果M [_]是monad,我可以用 =组成Kleisli [M,B]和Kleisli [M,B,C].得到Kleisli [M,C]. 简而言之,Kleisli根据M提供花式和Thens.这是正确的吗?使用Kleisli还有其他好处吗? 解决
在
scalaz中,Kleisli [M [_],A,B]是A =>的包装器. M [B],允许组合这些功能.例如,如果M [_]是monad,我可以用> =>组成Kleisli [M,B]和Kleisli [M,B,C].得到Kleisli [M,C].
简而言之,Kleisli根据M提供花式和Thens.这是正确的吗?使用Kleisli还有其他好处吗? 解决方法
这有两个好处作为例子 – 我相信你可以拿出其他人.
首先,抽象不同的箭头是有用的,例如Kleisli [M,?,?]和? => ?.例如,我可以编写一个通用函数,它将内部结构应用一定次数. def applyX10[Arr[_,_]: Category,A](f: Arr[A,A]) = List.fill(10)(Endomorphic(f)).suml 现在我可以使用它,例如Int => Int或Kleisli [Option,Int,Int]: val f = (_: Int) + 1 val k = Kleisli.kleisli[Option,Int] { case i if i % 2 == 0 => Some(i * 3) case _ => None } 然后: scala> applyX10(f).run(1) res0: Int = 11 scala> applyX10[=?>,Int](k).run(2) res1: Option[Int] = Some(118098) (注意A =?> B只是Kleisli [Option,B]的别名.) 其次,如果F确实如此,Kleisli [F,?]具有monad实例的事实也是有用的.请参阅例如my answer here,以演示如何使用ReaderT使用monadic合成,这只是Kleisli的别名. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |