问题标签 [kleisli]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
271 浏览

scala - 组合返回选项的函数

假设我有一些类型的函数Int => Option[Int]

我可以>=>按如下方式组合它们:

假设现在我需要组合列表中的所有函数:

我可以用mapand做到这一点reduce

它(composed以上)可以简化吗?

0 投票
1 回答
79 浏览

xml - 如何使用 Endomorphic wrapper 修复这个练习?

这是我之前的问题的后续。

假设我需要按路径查找 XML 节点。我可以编写一个函数来按名称获取子节点

child用 kleisli 编写函数;例如

现在我正在使用内构包装器,但它不起作用:

你能帮忙找出错误吗?

0 投票
1 回答
290 浏览

scala - 为什么 Scalaz 中没有 A => M[A] 的 >=> 半群?

这是我上一个问题的后续

Kleisli定义了两个运算符<=<(compose) 和>=>(andThen)。对>=>我来说看起来很自然,我不明白怎么<=<会有用。

此外,看起来没有>=>半群,A => M[A]<=<半群确实存在。

其背后的原理是什么?

0 投票
1 回答
234 浏览

scala - 通过 scalaz 中的 Kleisli 箭头组合函数时,无法在 Coyoneda 上找到 Free Monads 的 Bind 实例

预先感谢您的帮助

我有 2 个函数正在尝试通过 Kleisli 箭头编写。这些函数接受字符串并生成 FreeC。kleisli 箭头的创建没有问题,但编译器抱怨它找不到。为简单起见,我将删除一些代码:

出于某种原因,我得到的是这个编译错误:

感觉应该解决隐含问题,因为 FreeC 在实现 Bind 特征的 monad 实例中,并且我正在通过 import Free._ 导入所有 Free 隐含实例

我在这里想念什么?

先感谢您!

0 投票
1 回答
1018 浏览

haskell - 为什么 Kleisli 不是 Monoid 的一个实例?

如果您希望附加两个 (a -> mb) 类型的函数,以便只获得一个附加两个结果的相同类型的函数,则可以使用 Kleisli 来执行此操作:

但是,目前没有在 中定义这样的实例Control.Arrow。通常,在 Haskell 中,我怀疑有一个很好的理由,但找不到哪一个。

笔记

这个问题与这个问题很相似。但是,对于 Monoid,我看不到定义实例的方法,例如:

因为已经有一个实例:

0 投票
1 回答
147 浏览

scala - 有没有构成 Kleisli 内同态的有趣例子?

这是我之前的后续这是我之前的问题

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

我们使用这样一个事实,即函数A => M[A],其中M是一个单子,形成一个monoid因此我们可以轻松地组合它们。

现在我想知道是否还有其他有趣的例子来组合这些函数。

0 投票
1 回答
296 浏览

scala - 在 Scala 中编写 Kleisli 和 Reader monad

假设我有这样的功能:

我想将它们组合成一个新函数,它依次fooXAD: X => A => Try[D]调用fooXABfooXBC和,并将参数传递给它们。fooXCDX

假设我使用scalaz并有一个 monad 实例scala.util.Try。现在我可以这样做:

是否有意义?是否可以简化它?

0 投票
1 回答
137 浏览

scala - 在 Scala 中使用 Writer 和 Kleisli 验证 XML

这是我之前的问题的后续

假设我需要验证这样的 XML:

我需要确保根元素有 labela并且也有 children <a1>xxx</a1>, <a2>yyy</a2>,<a3>zzz</a3>按此顺序。

我想List[String]用来收集错误并定义一个函数来验证单个 XML 元素,如下所示:

现在我可以编写函数来验证给定 XML 元素的标签、文本和属性:

我可以用|+|因为ValidateSingleElement是一个幺半群来组合这些函数。

现在我需要一个函数来验证给定元素的子元素。为了编写这样一个函数,我需要另一个函数来验证一系列元素

ValidateElements定义如下:

我在遍历元素序列时使用List[String]and Writermonad 来收集错误。

现在我可以编写一个函数来验证给定元素的子元素:

...并验证序列的第一个元素:

最后我可以重新定义ValidateElementsKleisli

...并重新编写child返回Kleisli而不是函数。

鉴于两者childchildren我可以编写a- 从上面的 XML 验证函数:

是否有意义 ?您将如何纠正/扩展此设计?

0 投票
2 回答
62 浏览

scalaz - 如何使用 Kleisli 减少样板文件

我遵循功能和反应域建模这本书的设计

对于某些服务方法,它仅将工作委托给存储库层。有没有办法减少这个样板:

0 投票
1 回答
209 浏览

scala - 如何组合 Kleisli[M, A, C] 和 Kleisli[M, B, C]

我遵循优秀书籍Reactive Domain Modeling的设计,我需要混合Kleisli不同的类型:

由于类型不对齐,我收到以下编译错误

解决这个问题的最佳方法是什么,创建一个

和污染UserServiceProjectService它?