流れを切ってすみません。

Haskell 98 Reportの3.11 リスト内包表記で、
[ x | xs <- [ [(1,2),(3,4)], [(5,4),(3,2)] ], (3,x) <- xs ]
が [4,2] になるという例が載っています。

で、この「3」を変数として与えられるようにしようと、
(\y -> [ x | xs <- [ [(1,2),(3,4)], [(5,4),(3,2)] ], (y,x) <- xs ]) 3
とすると、内包表記内でyのスコープが別にできてしまい、
結果が [2,4,4,2] になってしまいます。

とりあえず、ガードをつけて、
(\y -> [ x | xs <- [ [(1,2),(3,4)], [(5,4),(3,2)] ], (z,x) <- xs, z==y ]) 3
とすれば、望みのことができますが、こうするしかないものなのでしょうか?