Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 使用括号来消除像'liftM b ap c'这样的表达式的歧义`_Haskell_Frege - Fatal编程技术网

Haskell 使用括号来消除像'liftM b ap c'这样的表达式的歧义`

Haskell 使用括号来消除像'liftM b ap c'这样的表达式的歧义`,haskell,frege,Haskell,Frege,在Haskell期间,以下工作: > (+) `liftM` (Just 3) `ap` (Just 5) Just 8 弗雷格提示使用偏执: frege> (+) `liftM` (Just 3) `ap` (Just 5) E <console>.fr:12: invalid expression, none-associative operator liftM found on same level as none-associative operator

在Haskell期间,以下工作:

> (+) `liftM` (Just 3) `ap` (Just 5)
Just 8
弗雷格提示使用偏执:

frege> (+) `liftM` (Just 3) `ap` (Just 5)
E <console>.fr:12: invalid expression, none-associative operator liftM
    found on same level as none-associative operator ap
H <console>.fr:12: Use parentheses to disambiguate an expression like a
    liftM b ap c
frege>(+)`liftM`(只有3个)`ap`(只有5个)
E.fr:12:表达式无效,无关联运算符liftM
在与无关联运算符ap相同的级别上找到
H.fr:12:使用括号来消除像
liftM b ap c
我在以下内容中找到此部分:

包含中缀运算符的表达式由 操作员的固定性(见第4.4.2节)。连续无定论 具有相同优先级的运算符必须同时为左或右 关联以避免语法错误。给予一个没有激情的 表达式“x qop(a,i)y qop(b,j)z”,必须在其周围添加括号 当i=j时,“x qop(a,i)y”或“y qop(b,j)z”,除非a=b=l或 a=b=r

在上面的代码中,两个“运算符”都没有关联性,并且具有相同的默认优先级,因此看起来Frege的行为与Haskell report一致


我理解得对吗?为什么弗雷格在这种情况下需要括号,而哈斯克尔能够消除歧义?或者Haskell是如何在这种情况下消除歧义的?

好吧,这是因为,目前来看,
`foo`
在Frege中默认为非关联性,而在Haskell中是左关联性


这应该在Frege编译器中进行更正,以使它更兼容Haskell。

我认为这两个都应该是左关联的(通过将它们放在反勾中),因此它是
(+)`liftM`(仅3))`ap`(仅5)
-也许弗雷格确实看到了这种不同,就像这里回答的问题一样:-你同意吗?@Carsten谢谢!我确实看到了那个问题,但我在问题中引用的话肯定忽略了,也混淆了,因为它说“给定了一个未加修饰的表达式……必须加上括号”。我再次检查了您链接的问题和Haskell报告,现在清楚了。