クイックソートも 6 行で

qsort :: Ord a => [a] -> [a]
qsort [] = []
qsort (x : xs) = qsort smaller ++ [x] ++ qsort larger
                 where
                   smaller = [a | a <- xs, a <= x]
                   larger = [a | a <- xs, a > x]

マジ Haskell 凄いんですけど。ちなみに qsort 関数の最初の宣言は順序クラスに属する型(Bool, Char, String, Int, Integer, Float など)の値からなるリストに対してリストを返す、という意味。
追記。filter 使うともっと短くできたw

qsort :: Ord a => [a] -> [a]
qsort [] = []
qsort (x : xs) = qsort (filter (<= x) xs) ++ [x] ++ qsort (filter (> x) xs)