【问题标题】:Tools to View Haskell Arrows as Graphs以图表形式查看 Haskell 箭头的工具
【发布时间】:2025-11-22 20:40:02
【问题描述】:

Haskell 箭头通常被解释为表示计算的有向无环图 (DAG)。我正在寻找可以使用这种关系来帮助使用 Arrows 进行编程的工具或库代码。

从箭头到图形,工具可以帮助可视化箭头代码。由于代码对应于计算的 DAG,因此显示计算节点和输出到输入边缘的视觉表示是自然的。一个工具可以创建一个图形,以便使用标准图形工具进行查看和操作。

是否有增强任意计算箭头类的箭头转换器,捕获 >>> 和 *** 操作提供的结构,并可以将计算作为基本箭头操作的图来检查?

从图到箭头,假设有一个 DAG,其节点是箭头操作。有没有一种工具可以由此构造一个计算整个 DAG 的箭头?

我在 Google 上搜索了很多关于 Haskell Arrows 的文章,但没有找到这样的可视化工具。我错过了什么?也许没有我想象的那么自然。

【问题讨论】:

  • 仍然希望得到有助于“图形到箭头”工具的响应。我开始明白,当基本箭头具有元组类型时,图形需要比简单的 DAG 更具表现力,以便识别哪个输出到哪个输入。这种图有名称或理论吗?
  • 我不能确切地告诉你关于“图形到箭头”的问题,但如果你有一个代表 DAG 的类型,其节点是箭头操作,听起来你可以给该类型一个 Arrow 实例并完成。
  • @Tom:如果 DAG 不对元组类型做任何花哨的事情,那就太容易了。例如,我想到了!graph of 4 nodes with crisscross of 4 arrows。看起来当我填写我需要的更具表现力的图表类型的详细信息时,您的建议仍然可行。

标签: haskell graph arrows


【解决方案1】:

一个好的起点是使用所谓的“免费Arrow”来指定您的箭头图。您可以找到免费的Arrows in this Stack Overflow answer 的一种实现。将此视为Arrow 图的语法表示。

免费Arrows 的好处是它们保留了图形的结构,然后您可以将其显示为图表。显示连接图后,您可以使用解释器将免费的Arrow 转换为所需的Arrow。 free Arrows 的一个很好的属性是,这样的解释器在定义上必须是唯一的(直到同构)(这是使其“免费”的属性之一)。

【讨论】:

  • 这是我问题的“箭头图”部分的一个很好的答案。看起来比我的“箭头转换器”的想法更好。
  • @pkturner 我想你可能想要的是Arrows 语言扩展,它可以让你从一堆边缘构建一个Arrow。基本上,每当您编写y <- someArrow -< x 时,它都会在节点xy 之间创建一条边,其中边是someArrow。如果这与您的想法接近,我会将其添加到我的答案中。
  • 这就是我一直在寻找的东西。我的 !4 nodes with crisscross of 4 arrows 示例可以写成 (a1,a0)