2012-03-26 2 views
6

포옹 (Hugs)은 일부 응용 프로그램에서 여러 가지 non-enbraced !!에 문제가있는 것으로 보입니다.Hugs !! 부분 애플리케이션 버그

이 GHCi에서 잘 작동하는 동안 :

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

안아 )에 대한 구문 오류를보고합니다.

이것은 Hugs의 버그입니까? 두 번째 목록 인덱스 연산자에 대한 추가 브레이스를 추가

하지만 작동합니다

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

또는

(([[0]]!!0)!!)0 
+1

잘 모르겠습니다. 나는 그것이 하스켈 표준의 다른 해석이라고 생각한다. 이것은 실제로 둘 이상의 운영자가 최하위에 나타나는 모든 섹션에서 발생합니다. – fuz

답변

2

이것은 포옹에 알려진 문제입니다. 식에 Hugs 98 Users Guide 섹션에서 : 포옹에

, 표현은 fexp (또는 case 또는 do)이어야합니다. (a+b+)(a*b+)과 같은 법적 표현이 거부됩니다.

여담 경고

어쩌면이 FUZxxl 자신의 의견에 대해 얘기했다 무엇인가?

import Prelude hiding ((!!)) 
infixr 5 !! -- infixr will make it right associative 
(!!) a b = head . drop b $ a 

지금 그 라인이 ghci에 하나가 작동하지 않습니다

ghc에 자신 (!!) 함수를 정의 시도하고 마우스 오른쪽 연관 정착을 설정!

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+)과 같은 표현식을 구문 분석하지 않는다는 점에서 왼쪽 대 오른쪽 결합에 관한 것입니다.