2012-01-15 2 views

답변

14

(| ... |) 대괄호 (일반적으로 바나나 괄호라고 함)는 proc 표기법 내에서 명령에 대해 작동하는 함수를 적용하기위한 것입니다. 이 명령은 정상적인 명령에서 명령 ('연산자'라고 함)에서 작동하는 기능의 모호성을 제거하는 데 사용됩니다. 바이너리 중온 연산자는 특수 사례이므로 (| (&&&) x y |)을 쓸 필요가 없습니다.

desugaring에 관해서는, 그들은 the Arrows paper에서 양식 키워드의 GHC 버전입니다. 다음

형태가 정의된다

PROC P ->형태 예 C1 C2 ... CN

=

E (proc p -> c1) (PROC P -> C2) (시저 P -> CN)

따라서는, proc x -> (|untilA (increment -< x+y) (within 0.5 -< x)|)이 될 수 없을 것입니다 :

untilA (proc x -> increment -< x+y) (proc x -> within 0.5 -< x) 

당신이 desugar하려면 완전히 그래서이 구문 왼쪽 화살표가 될 것입니다 :

untilA (arr (\x -> x+y) >>> increment) (arr (\x -> x) >>> within 0.5) 
0

이 매우 거칠고 직관적 인 대답하고 나는 그것이 맞습니다 확실하지 않다하지만 그것이 것처럼 느낀다. 당신이

proc a -> do 
    a1 <- command1 <- ... 
    ... 
    an <- commandn <- ... 

    (| structure (block1 -< expression1[a, a1, ..., an]) 
       ... 
       (blockm -< expressionm[a, a1, ..., an]) 
    |) 

이있는 경우가된다 즉 다음 (||)block들로 범위에있는 모든 <- -bound 변수에 공급하는 방법이있다 (이에 상응하는)

proc a -> do 
    a1 <- command1 <- ... 
    ... 
    an <- commandn <- ... 

    structure (proc (a, a1, ..., an) -> do 
        block1 -< expression1[a, a1, ..., an]) 
       ... 
       (proc (a, a1, ..., an) -> do 
        blockm -< expressionm[a, a1, ..., an]) 
         -< (a, a1, ..., an) 

나는 단지이 파악 올리버 찰스의 문서를 읽을 때 antijoins in Rel8. 나는 아직도 그것을 다소 마음이 구부러진 채 발견한다.

+0

그리고 저는 연산에 대한 인수 ('structure')에서'- < '로 포착 된 변수가'-'에 의해 연산 외부에 바인드 된 변수와 관련이 있다고 생각합니다. 'structure'는 입력 타입에서 다형성을가집니다. –

관련 문제