Haskell 特殊的支架(|…|)是用来做什么的?
我已经读过了,但我并不完全清楚“7.10.3.定义您自己的控制结构”中的“管道支架”使用了什么 给出了上述文档中的示例Haskell 特殊的支架(|…|)是用来做什么的?,haskell,syntax,arrows,Haskell,Syntax,Arrows,我已经读过了,但我并不完全清楚“7.10.3.定义您自己的控制结构”中的“管道支架”使用了什么 给出了上述文档中的示例 proc x -> do y <- f -< x+1 (|untilA (increment -< x+y) (within 0.5 -< x)|) proc x->do y括号(|…|)用于在proc符号中应用对命令进行操作的函数。它们用于消除对命令(称为“运算符”)进行操作的函数与正常命令之间的歧义。二进制中缀运算符是特殊情况
proc x -> do
y <- f -< x+1
(|untilA (increment -< x+y) (within 0.5 -< x)|)
proc x->do
y括号(|…|)
用于在proc符号中应用对命令进行操作的函数。它们用于消除对命令(称为“运算符”)进行操作的函数与正常命令之间的歧义。二进制中缀运算符是特殊情况的,因此不需要编写(&&&&)xy>
至于desugaring,它们是GHC版本的表单关键字
表格定义如下:
procp->表格e c1 c2。。。cn
=
e(procp->c1)(procp->c2)。。。(procp->cn)
因此,proc x->(|直到(增量-
将变成:
untilA (proc x -> increment -< x+y) (proc x -> within 0.5 -< x)
untilA (arr (\x -> x+y) >>> increment) (arr (\x -> x) >>> within 0.5)
这是一个非常粗略和直观的答案,我不确定它是否正确,但感觉它是正确的。如果你有
proc a -> do
a1 <- command1 <- ...
...
an <- commandn <- ...
(| structure (block1 -< expression1[a, a1, ..., an])
...
(blockm -< expressionm[a, a1, ..., an])
|)
我只是在读奥利弗·查尔斯的医生时才领会到这一点。我仍然觉得这很令人费解。而且我认为
-
proc a -> do
a1 <- command1 <- ...
...
an <- commandn <- ...
structure (proc (a, a1, ..., an) -> do
block1 -< expression1[a, a1, ..., an])
...
(proc (a, a1, ..., an) -> do
blockm -< expressionm[a, a1, ..., an])
-< (a, a1, ..., an)