2013-03-15 5 views
3

나는 haskell 언어 확장에 대해 this guide을 읽고 TransformListComp 설명으로 다소 혼란 스러웠다. 나는 설탕없이 모든 TransformListComp 표현식을 다시 써 보았지만 내가 맞는지 확실하지 않습니다.Haskell TransformListComp extension

또한 가이드에 실수가 있다고 생각합니다. "(groupBy (==))"("Eq a"는 할 수 없습니다.

[foo | x1 <- xs1, 
     x2 <- xs2, 
     ... 
     xi <- xsi, 
     then f, 
     xj <- xsj, 
     ... 
     xn <- xni 
    ] 

== 
[foo | f x1 <- xs1, 
     f x2 <- xs2, 
     ... 
     f xi <- xsi, 
     xj <- xsj, 
     ... 
     xn <- xni 
    ] 

------------------- 


[foo | x1 <- xs1, 
     x2 <- xs2, 
     ... 
     xi <- xsi, 
     then f by exp, 
     xj <- xsj, 
     ... 
     xn <- xni 
    ] 

== 

f (\(x1,x2,...,xi) -> exp) [(x1,x2,...,xi) | 
     x1 <- xs1, 
     x2 <- xs2, 
     ... 
     xi <- xsi] 

>>=(\(x1,x2,...,xi) -> 
    [foo | 
     xj <- xsj, 
     ... 
     xn <- xni 
    ]) 


------------------- 

[foo | x1 <- xs1, 
     x2 <- xs2, 
     ... 
     xi <- xsi, 
     then group using f, 
     xj <- xsj, 
     ... 
     xn <- xni 
    ] 

== 

map unzipI (f [(x1,x2,...,xi) | 
     x1 <- xs1, 
     x2 <- xs2, 
     ... 
     xi <- xsi]) 

>>=(\(xs1,xs2,...,xsi) -> 
    [foo | 
     x1 <- xs1, 
     x2 <- xs2, 
     ... 
     xi <- xsi, 
     xj <- xsj, 
     ... 
     xn <- xni 
    ]) 

unzipI :: [(t1,t2,...tn)] -> ([t1],[t2]..,[tn]) 

------------------- 

[foo | x1 <- xs1, 
     x2 <- xs2, 
     ... 
     xi <- xsi, 
     then group by exp using f, 
     xj <- xsj, 
     ... 
     xn <- xni 
    ] 

== 

map unzipI (f (\(x1,x2,...,xi) -> exp) [(x1,x2,...,xi) | 
     x1 <- xs1, 
     x2 <- xs2, 
     ... 
     xi <- xsi]) 

>>=(\(xs1,xs2,...,xsi) -> 
    [foo | 
     x1 <- xs1, 
     x2 <- xs2, 
     ... 
     xi <- xsi, 
     xj <- xsj, 
     ... 
     xn <- xni 
    ]) 

unzipI :: [(t1,t2,...tn)] -> ([t1],[t2]..,[tn]) 

답변

0

당신은

[ foo | (x1, x2) <- f [ (x1, x2) | x1 <- xs1 
           , x2 <- xs2 ] 
     , x3 <- xs3 ] 

로 더 정확하게

[ foo | x1 <- xs1 
     , x2 <- xs2 
     , then f 
     , x3 <- xs3 ] 

를 다시 작성할 수있다)를 사용할 수 그 동안3210 실수가 수정 된 것으로 보입니다. 기사의 예제가 작동합니다.

이 확장에 대한 또 다른 유용한 정보는 blog post에 있으며 원래 문서 comprehensive comprehensions을 참조하십시오.