Hugs似乎在部分应用程序中遇到了几个非enbraced !!
的问题。
虽然这在GHCi中运行良好:
([[0]]!!0!!)0
拥抱报告)
的语法错误。
这是Hugs中的错误吗?
为第二个列表索引运算符添加额外的大括号有效:
(([[0]]!!)0!!)0
或
(([[0]]!!0)!!)0
答案 0 :(得分:2)
这是Hugs中的一个已知问题。从表达式的Hugs 98 Users Guide部分:
在Hugs中,表达式必须是
fexp
(或case
或do
)。 <{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
这样的表达式。