Это известная проблема в Hugs. Из раздела Руководства пользователя Hugs 98, посвященного выражениям:
В Hugs выражение должно быть fexp
(или case
, или do
). Допустимые выражения, такие как (a+b+)
и (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
и теперь является правоассоциативным. Если вы используете infixl
, эта строка работает нормально.
Это совершенно отдельная проблема от вопроса, который вы задали. Речь идет о левой и правой ассоциативности, тогда как проблема с Hugs заключается в том, что он просто не анализирует выражение, такое как (a+b+)
.
person
Vlad the Impala
schedule
29.03.2012