拥抱!!部分应用程序错误

时间:2012-03-26 14:39:06

标签: haskell hugs

Hugs似乎在部分应用程序中遇到了几个非enbraced !!的问题。

虽然这在GHCi中运行良好:

([[0]]!!0!!)0

拥抱报告)的语法错误。

这是Hugs中的错误吗?

为第二个列表索引运算符添加额外的大括号有效:

(([[0]]!!)0!!)0

(([[0]]!!0)!!)0

1 个答案:

答案 0 :(得分:2)

这是Hugs中的一个已知问题。从表达式的Hugs 98 Users Guide部分:

  

在Hugs中,表达式必须是fexp(或casedo)。 <{1}}和(a+b+)等法律用语被拒绝。

Digression Alert

也许这是(a*b+)在评论中谈到的内容?

尝试在FUZxxl中定义自己的(!!)函数,并将其设置为具有右关联固定性:

ghc

现在该行在import Prelude hiding ((!!)) infixr 5 !! -- infixr will make it right associative (!!) a b = head . drop b $ a 中也不起作用!

ghci

因为ghci> :t ([[0]] !! 0 !!) <interactive>:1:1: The operator `!!' [infixr 5] of a section must have lower precedence than that of the operand, namely `!!' [infixr 5] in the section: `[[0]] !! 0 !!' 已设置为(!!),现在是右关联的。如果您使用infixr,该行可以正常使用。

这与您提出的问题完全不同。这是关于左与右的关联性,而Hugs的问题是它只是不解析像infixl这样的表达式。