问题标签 [arrows]

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 回答
202 浏览

haskell - 将箭头分解为箭头符号是否是有效的转换?

我试图了解 HXT,这是一个用于解析使用箭头的 XML 的 Haskell 库。对于我的特定用例,我宁愿不使用deep,因为有些情况<outer_tag><payload_tag>value</payload_tag></outer_tag>是不同的,<outer_tag><inner_tag><payload_tag>value</payload_tag></inner_tag></outer_tag>但我遇到了一些奇怪的感觉,感觉它应该工作但没有。

我已经设法根据文档中的这个示例提出了一个测试用例:

之间getGuestgetGuest'我扩展deep到正确的数量getChildren。结果函数仍然有效。getChildren然后我将块的外部因素考虑在内,do但这会导致结果函数失败。输出是:

我觉得这应该是一个有效的转换来执行,但我对箭头的理解有点不稳定。难道我做错了什么?这是我应该报告的错误吗?

我正在使用 HXT 版本 9.3.1.3(撰写本文时的最新版本)。ghc --version 打印“The Glorious Glasgow Haskell Compilation System, version 7.4.1”。我还在一个装有 ghc 7.6.3 的盒子上进行了测试,并得到了相同的结果。

XML 文件具有以下重复结构(可在此处找到完整文件)

0 投票
1 回答
182 浏览

javascript - 带有 Python 或 JavaScript 代码的单子和箭头的简单示例?

假设我们有以下两个功能:

请展示我们将如何组成这些:

  1. 一个单子和
  2. 一个箭头

假设这些函数没有副作用,请展示我们如何组合它们并携带一些状态,比如调试日志消息。

注意:这不是家庭作业,我只是想为自己的学习和使用 monads 和箭头编程获得一些好的、清晰的参考代码,谢谢。

0 投票
1 回答
444 浏览

haskell - HLint : 使用 &&& 建议

我在一个小项目上运行HLint,它建议我使用 &&&。

例子 :

我理解这\x -> (f x, g x)是一种模式并欣赏这个建议。但是Control.Arrow.&&&不采用普通功能而是箭头,所以我不能&&&按照建议使用。

那么在这种情况下推荐的方法是什么?

  • 在函数上定义我自己的&&&运算符?
  • 使用箭头并做类似的事情,(arr f) &&& (arr g)但我什至不知道如何评估它?
  • 在那个特定的场合忽略Hlint。?
0 投票
2 回答
170 浏览

xml - HXT:输入可以用箭头语法改变吗?

使用以下代码

我得到输出

所以它似乎hasName "item"适用于x我没想到的。使用箭头我得到parseXml

所以我有箭头图

为什么hasName "item"也适用于元组的第二位?我认为 haskell 中没有状态并hasName "item" x返回一个新对象而不是更改x.

相关问题:从箭头符号中分解箭头是否是有效的转换?

我原来的问题

我有以下代码:

如果我运行它一切正常,我得到输出

但是如果我改变parseXml以避免this陈述

再也无法解析任何人(输出为[])。调查问题

我得到了输出

所以一切看起来都很好,但是有代码

我有

所以在我看来,输入的值x在两个语句之间发生了变化。看起来是在附加到箭头之前hasName "fn"应用的。但是两条线之间不应该保持不变吗?xsurnamex

0 投票
1 回答
532 浏览

haskell - 脱糖箭头语法后如何获取haskell代码?

我目前正在尝试解决我的问题HXT: Can a input change with the arrow syntax? 因此并希望在 ghc 编译器对Arrow 语法进行去糖之后查看 haskell 代码。我怎样才能做到这一点?

我已经尝试过-ddump-ds了,但是有了这个标志,我得到了一个可怕的长代码,因为所有类型都被解析了。有没有办法只用箭头语法去糖来查看代码?

0 投票
1 回答
97 浏览

haskell - 测试是否存在节点HXT

有没有办法测试节点(属性值)并将其与我的 if-condition 一起使用?例如:

在那个例子中,我想测试一个属性值,如果它存在,它返回我的 then-condition 否则返回 else-condition!我看到了 XMLArrow 的 API,它存在一些能够做到这一点的函数(例如,isAttrib 或 hasAttrib)但它不返回布尔值......所以......我想到了解决它的其他方法,但我认为必须有一个更简单的解决方案来解决这个问题......有人可以给我一个提示吗?

0 投票
1 回答
360 浏览

haskell - mapA 如何与 Haskell 中的流函数箭头一起使用?

背景

我一直在阅读 John Hughes 的Programming with Arrows,我觉得我的一切都在我的脑海中,直到以下使用 mapA 的示例:

其中 runSF 从 StreamFunction 箭头中提取流函数,定义为:

延迟定义为:

SF 是 ArrowChoice 的一个实例(它声明了 mapA),因此也是一个 Arrow 的实例。

我的理解

这样就delay简单地将其第二个参数与第一个参数放在一起。

因此,mapA (delay 0)应该返回给我们一个接受[[a]]和返回的 SF 箭头[[b]]

我希望这会导致的“电路”是:

mapA的控制流程图(延迟0)

数字标记过程部分的地方:

  1. 对于任何非空的list xlistcase都会发出Right(x, xs)。对于空列表,listcase将发出Left()终端情况。
  2. 标记的值Right将传递到下部。标记的值Left将传递给const[],这实际上停止了迭代。
  3. 随着输入(x, xs)x将被传递给(delay 0),而xs将被传递回给listcase
  4. 3 的输出将是(z, zs),它被传递给uncurry (:),它将元组重新连接到列表中。

这是我对流程的理解,带有输入[[1,2,3],[4,5,6],[7,8,9]]

  • 第一关

    1. Right ([1,2,3],[[4,5,6],[7,8,9]])
    2. ([1,2,3], [[4,5,6],[7,8,9]])被传递到下部
    3. (delay 0)被调用[1,2,3],导致[0,1,2]. [[4,5,6],[7,8,9]]被传回listcase
  • 第二遍

    1. Right ([4,5,6], [[7,8,9]])
    2. ([4,5,6], [[7,8,9]])被传递到下部
    3. (delay 0)被调用[4,5,6],导致[0,4,5]. [[7,8,9]]被传回listcase
  • 第三关

    1. Right ([7,8,9], [])
    2. ([7,8,9], [])被传递到下部
    3. (delay 0)被调用[7,8,9],导致[0,7,8]. []传回给listcase.
  • 第四关

    1. Left (),掉在地上。

在这一点上,我们进入第 4 部分,它获取 3 的输出并将它们连接在一起。我们基本上构建了以下操作:

[0,1,2] : [[0,4,5] : [[0,7,8] : []]]

这会给我们[[0,1,2],[0,4,5],[0,7,8]]

我的困惑

显然,我上面的流程是错误的。

调用runSF (mapA (delay 0)) [[1,2,3],[4,5,6],[7,8,9]]结果如何[[0,0,0],[1,2,3],[4,5,6]]

0 投票
2 回答
287 浏览

function - 箭头优于函数

与haskell中的常规函数​​相比,箭头有什么优势。他们能做什么功能不能。函数可以使用 fmap 映射结构。

0 投票
1 回答
567 浏览

xslt - 使用 HXT 转换节点的数量
祖先节点

我正在寻找用, , ... ,元素替换所有title元素,具体取决于元素的祖先数量。示例输入/输出:h1h2h6section

输入.xml

输出.xml

我可以使用类似这样的方法将所有titles替换为 sh1

我相信我应该使用 ArrowState,但我无法弄清楚如何使用。有人可以指出我正确的方向吗?

0 投票
1 回答
1645 浏览

haskell - 奇怪的 ghc 错误消息,“我的大脑刚刚爆炸”?

当我尝试以proc语法模式匹配 GADT 时(使用 Netwire 和 Vinyl):

我从 ghc-7.6.3 得到(相当奇怪的)编译器错误

当我将模式放入模式中时,我得到了类似的错误proc (...)。为什么是这样?它是不健全的,还是只是未实现?