リスト内包表記。

リスト内包表記(list comprehension)
リストの中にそのリストの要素を生成する処理を書くような感じと理解。

[abs x | x <- [-1, -2, -3]]

結果。

[1, 2, 3]

xにリストの要素が渡され、xに対してabs関数を適用、その結果がリストの要素となる。
リスト内包表記を使用したクイックソート

main = print $ qsort [3, 4, 2, 5, 1]

qsort :: [Int] -> [Int]
qsort [] = []
qsort (p:xs) = qsort lt ++ [p] ++ qsort qteq
               where
                 lt = [x | x <- xs, x < p]
                 qteq = [x | x <- xs, x >= p]

結果。

[1, 2, 3, 4, 5]

こんなこともできる。

 [(x, y) | x <- [1,2,3], y <- ['a','b','c']]

結果。

[(1,'a'),(1,'b'),(1,'c'),
 (2,'a'),(2,'b'),(2,'c'),
 (3,'a'),(3,'b'),(3,'c')]