问题标签 [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.
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>
但我遇到了一些奇怪的感觉,感觉它应该工作但没有。
我已经设法根据文档中的这个示例提出了一个测试用例:
之间getGuest
和getGuest'
我扩展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 文件具有以下重复结构(可在此处找到完整文件)
javascript - 带有 Python 或 JavaScript 代码的单子和箭头的简单示例?
假设我们有以下两个功能:
和
请展示我们将如何组成这些:
- 一个单子和
- 一个箭头
假设这些函数没有副作用,请展示我们如何组合它们并携带一些状态,比如调试日志消息。
注意:这不是家庭作业,我只是想为自己的学习和使用 monads 和箭头编程获得一些好的、清晰的参考代码,谢谢。
haskell - HLint : 使用 &&& 建议
我在一个小项目上运行HLint,它建议我使用 &&&。
例子 :
我理解这\x -> (f x, g x)
是一种模式并欣赏这个建议。但是Control.Arrow.&&&
不采用普通功能而是箭头,所以我不能&&&
按照建议使用。
那么在这种情况下推荐的方法是什么?
- 在函数上定义我自己的
&&&
运算符? - 使用箭头并做类似的事情,
(arr f) &&& (arr g)
但我什至不知道如何评估它? - 在那个特定的场合忽略Hlint。?
xml - HXT:输入可以用箭头语法改变吗?
使用以下代码
我得到输出
所以它似乎hasName "item"
适用于x
我没想到的。使用箭头我得到parseXml
:
所以我有箭头图
为什么hasName "item"
也适用于元组的第二位?我认为 haskell 中没有状态并hasName "item" x
返回一个新对象而不是更改x
.
相关问题:从箭头符号中分解箭头是否是有效的转换?
我原来的问题
我有以下代码:
如果我运行它一切正常,我得到输出
但是如果我改变parseXml
以避免this
陈述
再也无法解析任何人(输出为[]
)。调查问题
我得到了输出
所以一切看起来都很好,但是有代码
我有
所以在我看来,输入的值x
在两个语句之间发生了变化。看起来是在附加到箭头之前hasName "fn"
应用的。但是两条线之间不应该保持不变吗?x
surname
x
haskell - 脱糖箭头语法后如何获取haskell代码?
我目前正在尝试解决我的问题HXT: Can a input change with the arrow syntax? 因此并希望在 ghc 编译器对Arrow 语法进行去糖之后查看 haskell 代码。我怎样才能做到这一点?
我已经尝试过-ddump-ds
了,但是有了这个标志,我得到了一个可怕的长代码,因为所有类型都被解析了。有没有办法只用箭头语法去糖来查看代码?
haskell - 测试是否存在节点HXT
有没有办法测试节点(属性值)并将其与我的 if-condition 一起使用?例如:
在那个例子中,我想测试一个属性值,如果它存在,它返回我的 then-condition 否则返回 else-condition!我看到了 XMLArrow 的 API,它存在一些能够做到这一点的函数(例如,isAttrib 或 hasAttrib)但它不返回布尔值......所以......我想到了解决它的其他方法,但我认为必须有一个更简单的解决方案来解决这个问题......有人可以给我一个提示吗?
haskell - mapA 如何与 Haskell 中的流函数箭头一起使用?
背景
我一直在阅读 John Hughes 的Programming with Arrows,我觉得我的一切都在我的脑海中,直到以下使用 mapA 的示例:
其中 runSF 从 StreamFunction 箭头中提取流函数,定义为:
延迟定义为:
SF 是 ArrowChoice 的一个实例(它声明了 mapA),因此也是一个 Arrow 的实例。
我的理解
这样就delay
简单地将其第二个参数与第一个参数放在一起。
因此,mapA (delay 0)
应该返回给我们一个接受[[a]]
和返回的 SF 箭头[[b]]
我希望这会导致的“电路”是:
数字标记过程部分的地方:
- 对于任何非空的
list x
,listcase
都会发出Right(x, xs)
。对于空列表,listcase
将发出Left()
终端情况。 - 标记的值
Right
将传递到下部。标记的值Left
将传递给const[]
,这实际上停止了迭代。 - 随着输入
(x, xs)
,x
将被传递给(delay 0)
,而xs
将被传递回给listcase
。 - 3 的输出将是
(z, zs)
,它被传递给uncurry (:)
,它将元组重新连接到列表中。
这是我对流程的理解,带有输入[[1,2,3],[4,5,6],[7,8,9]]
:
第一关
Right ([1,2,3],[[4,5,6],[7,8,9]])
([1,2,3], [[4,5,6],[7,8,9]])
被传递到下部(delay 0)
被调用[1,2,3]
,导致[0,1,2]
.[[4,5,6],[7,8,9]]
被传回listcase
第二遍
Right ([4,5,6], [[7,8,9]])
([4,5,6], [[7,8,9]])
被传递到下部(delay 0)
被调用[4,5,6]
,导致[0,4,5]
.[[7,8,9]]
被传回listcase
第三关
Right ([7,8,9], [])
([7,8,9], [])
被传递到下部(delay 0)
被调用[7,8,9]
,导致[0,7,8]
.[]
传回给listcase
.
第四关
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]]
?
function - 箭头优于函数
与haskell中的常规函数相比,箭头有什么优势。他们能做什么功能不能。函数可以使用 fmap 映射结构。
xslt - 使用 HXT 转换节点的数量祖先节点
我正在寻找用, , ... ,元素替换所有title
元素,具体取决于元素的祖先数量。示例输入/输出:h1
h2
h6
section
输入.xml
输出.xml
我可以使用类似这样的方法将所有title
s替换为 sh1
我相信我应该使用 ArrowState,但我无法弄清楚如何使用。有人可以指出我正确的方向吗?
haskell - 奇怪的 ghc 错误消息,“我的大脑刚刚爆炸”?
当我尝试以proc
语法模式匹配 GADT 时(使用 Netwire 和 Vinyl):
我从 ghc-7.6.3 得到(相当奇怪的)编译器错误
当我将模式放入模式中时,我得到了类似的错误proc (...)
。为什么是这样?它是不健全的,还是只是未实现?